使用Scala将String连接到Spark数据框中List的每个元素

时间:2016-09-02 22:08:07

标签: scala apache-spark spark-dataframe

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

2 个答案:

答案 0 :(得分:2)

我认为您应该将merge into items (f_id, f_index) key(f_id) select f_id, rownum() from items order by f_index 重新定义为类似于我的功能UDF

append

答案 1 :(得分:2)

我建议你在spark之外尝试你的udf函数,并让它们首先为局部变量工作。如果你这样做:

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)

你会看到val multiplier = (x1: String, x2: Seq[String]) => {x1+x2} multiplier("a", Seq("A", "B")) // output res1: String = aList(A, B) 没有做你想做的事。

我认为你在寻找:

multiplier