我有一个数据框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
。
在第一种情况下,我最终得到了新的列名,例如:avg(user.followers_count AS ``followers_count``)
,avg(user.friends_count AS ``friends_count``)
。是否可以为聚合过程定义新的列名?
我知道使用SQL语法可能是一个解决方案,但我的目标最终是能够通过命令行(逐列,聚合列和函数)传递参数,所以我试图构建允许这样做的管道。
感谢您阅读本文!