Apache Spark 2.0 Dataframes(Dataset)组由多个聚合和新列命名组成

时间:2016-08-18 02:24:05

标签: apache-spark apache-spark-sql spark-dataframe

  1. 汇总多列:
  2. 我有一个数据框input。 我想为每个分组列应用不同的聚合函数。 在简单的情况下,我可以这样做,它按预期工作:

    val x = input.groupBy("user.lang").agg(Map("user.followers_count" -> "avg", "user.friends_count" -> "avg"))

    但是,如果我想为同一列添加更多聚合函数,则会遗漏它们,例如:

    val x = input.groupBy("user.lang").agg(Map("user.followers_count" -> "avg", "user.followers_count" -> "max", "user.friends_count" -> "avg"))

    当我通过地图时,这并不奇怪。如何解决此问题并为同一列添加另一个聚合函数?

    我的理解是,这可能是一个可能的解决方案:

    val x = input.groupBy("user.lang").agg(avg($"user.followers_count"), max($"user.followers_count"), avg("user.friends_count"))

    然而,这会返回错误:error: not found: value avg

    1. 新列命名:
    2. 在第一种情况下,我最终得到了新的列名,例如:avg(user.followers_count AS ``followers_count``)avg(user.friends_count AS ``friends_count``)。是否可以为聚合过程定义新的列名?

      我知道使用SQL语法可能是一个解决方案,但我的目标最终是能够通过命令行(逐列,聚合列和函数)传递参数,所以我试图构建允许这样做的管道。

      感谢您阅读本文!

0 个答案:

没有答案