这就是我在Dataframe中用于连接两个列然后进行转置的数据透视表中的两个列。
// Define a udf to concatenate two passed in string values
val concat = udf( (first: String, second: String) => { first + " " + second } )
def main (args: Array[String]) {
// pivot using concatenated column
domainDF.withColumn("combColumn", concat($"col1",$"col2"))
.groupBy("someCol").pivot("combColumn").agg(count).show()
}
我的要求是使此功能通用,因此可以将任意数量的列作为变量参数进行串联。 任何人都可以为需求提供任何解决方案吗? 谢谢
答案 0 :(得分:2)
改为使用内置的隐藏函数,它允许输入列数可变。参见documentation。
在这种情况下,您可以执行以下操作:
import org.apache.spark.sql.functions._
domainDF.withColumn("combColumn", concat(Seq($"col1", $"col2"):_*))
.groupBy("someCol").pivot("combColumn").agg(count)
如果要在列值之间使用分隔符,请使用concat_ws
。例如,要使用空格:concat_ws(" ", Seq(...))
。
如果由于其他原因需要使用UDF
,可以通过将它们包装在数组中来使用可变数量的参数,请参见:Spark UDF with varargs