使用 Scala 将字符串连接到 Spark 数据框中列表的每个元素
Concatenate String to each element of a List in a Spark dataframe with Scala
我在 Spark 数据框中有两列:一列是字符串,另一列是字符串列表。如何创建一个新列,该列是第一列中的字符串与第二列中列表的每个元素的串联,从而在第三列中产生另一个列表。
例如,如果第 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)
您会发现 multiplier
没有按照您的意愿进行。
我想你正在寻找:
val multiplier = (x1: String, x2: Seq[String]) => x2.map(x1+_)
multiplier("a", Seq("A", "B"))
//output
res2: Seq[String] = List(aA, aB)
我在 Spark 数据框中有两列:一列是字符串,另一列是字符串列表。如何创建一个新列,该列是第一列中的字符串与第二列中列表的每个元素的串联,从而在第三列中产生另一个列表。
例如,如果第 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)
您会发现 multiplier
没有按照您的意愿进行。
我想你正在寻找:
val multiplier = (x1: String, x2: Seq[String]) => x2.map(x1+_)
multiplier("a", Seq("A", "B"))
//output
res2: Seq[String] = List(aA, aB)