簡體   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