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

使用Scala将字符串连接到Spark数据帧中列表的每个元素,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,Spark数据框中有两列:一列是字符串,另一列是字符串列表。如何创建一个新列,该列是第1列中的字符串与第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

Spark数据框中有两列:一列是字符串,另一列是字符串列表。如何创建一个新列,该列是第1列中的字符串与第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)

我认为你应该重新定义你的
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)

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

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

// output
res1: String = aList(A, B)
您将看到
乘数
并不能满足您的需求

我想你在寻找:

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

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