繁体   English   中英

使用Scala将字符串连接到Spark数据框中的列表的每个元素

[英]Concatenate String to each element of a List in a Spark dataframe with Scala

我在Spark数据帧中有两列:一列是字符串,另一列是字符串列表。 如何创建一个新列,该列是第1列中的String与第2列中的列表的每个元素的串联,从而在第3列中产生另一个列表。

例如,如果列1为“ a”,列2为[“ A”,“ B”],则希望数据帧第3列的输出为[“ aA”,“ aB”]。

到目前为止,我有:

val multiplier = (x1: String, x2: Seq[String]) => {x1+x2}
val multiplierUDF = udf(multiplier)
val df2 = df1
  .withColumn("col3", multiplierUDF(df1("col1"),df1("col2")))

这给出aWrappedArray(A,B)

我建议您在spark之外尝试udf函数,并首先让它们对局部变量起作用。 如果您这样做:

val multiplier = (x1: String, x2: Seq[String]) => {x1+x2}
multiplier("a", Seq("A", "B"))

// output
res1: String = aList(A, B)

您会看到multiplier没有执行您想要的操作。

我认为您正在寻找:

val multiplier = (x1: String, x2: Seq[String]) => x2.map(x1+_)
multiplier("a", Seq("A", "B"))

//output
res2: Seq[String] = List(aA, aB)

我认为您应该将UDF重新定义为类似于我的功能append

val a = Seq("A", "B")
val p = "a"

def append(init: String, tails: Seq[String]) = tails.map(x => init + x)

append(p, a)

//res1: Seq[String] = List(aA, aB)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM