我在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)