在Spark Dataframe中动态地在多个列上枢轴

这就是我在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()

  }

我的要求是使此功能通用,因此可以将任意数量的列作为变量参数进行串联。 任何人都可以为需求提供任何解决方案吗? 谢谢

beixiaonuan 回答:在Spark Dataframe中动态地在多个列上枢轴

改为使用内置的隐藏函数,它允许输入列数可变。参见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

本文链接:https://www.f2er.com/3119994.html

大家都在问