scala Spark dataframe map aggregation with alias?

xqkwcwgp  于 2023-06-23  发布在  Scala
关注(0)|答案(1)|浏览(151)

我喜欢这样使用spark dataframe map聚合语法:

jaccardDf
        .groupBy($"userId")
        .agg(
          "jaccardDistance"->"avg"
          , "jaccardDistance"->"stddev_samp"
          , "jaccardDistance"->"skewness"
          , "jaccardDistance"->"kurtosis"
)

有没有一种方法可以在仍然使用Map语法的情况下对结果列使用别名?当我需要别名我这样做,而不是

jaccardDf
        .groupBy($"userId")
        .agg(
          avg("jaccardDistance").alias("jaccardAvg")
          ,stddev_samp("jaccardDistance").alias("jaccardStddev")
          ,skewness("jaccardDistance").alias("jaccardSkewness")
          ,kurtosis("jaccardDistance").alias("jaccardKurtosis")
)
izj3ouym

izj3ouym1#

使用.toDF()为您定义的列表中的列名设置别名:

val colNames = Array("userId", "jaccardAvg", "jaccardStddev", "jaccardSkewness", "jaccardKurtosis") 

jaccardDf
    .groupBy($"userId")
    .agg(
      "jaccardDistance"->"avg",
      "jaccardDistance"->"stddev_samp",
      "jaccardDistance"->"skewness",
      "jaccardDistance"->"kurtosis")
    .toDF(colNames: _*)

相关问题