scala - 带别名的 Spark 数据帧映射聚合?

标签 scala apache-spark aggregate-functions

我喜欢使用 Spark 数据帧映射聚合语法,如下所示:

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")
)

最佳答案

使用 .toDF() 使用您定义的列表为列名添加别名:

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

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

关于scala - 带别名的 Spark 数据帧映射聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55596822/

相关文章:

scala - 使用 Scala 反射 API 获取内部模块的伴随对象实例

scala - 通过最短路径链接隐式

apache-spark - 如果子字符串存在于两个字符串之间,则提取两个字符串之间的文本

apache-spark - 如果数据为 10 gb 且 RAM 为 1gb,会将数据加载到内存中

mysql 子查询 COUNT 与 WHERE 子句混淆

scala - 为什么我在 rdd 中的 println 会打印元素字符串?

scala - 从键盘读取日期直到正确 - 在 scala 中

python - 将数组传递给 Spark Lit 函数

mongodb - Mongo Aggregation 删除一个 id 的所有记录,只保留最旧的记录

mysql - 复杂的 MySQL 查询 : Get Name of object, 和所有孙子的计数和平均值