【发布时间】:2021-05-03 22:01:02
【问题描述】:
基于以下数据框:
+---+-----+----+
| ID|Categ|Amnt|
+---+-----+----+
| 1| A| 10|
| 1| A| 5|
| 2| A| 56|
| 2| B| 13|
+---+-----+----+
我想获取 Amnt groupby ID 和 Categ 列的总和。
+---+-----+-----+
| ID|Categ|Count|
+---+-----+-----+
| 1| A| 15 |
| 2| A| 56 |
| 2| B| 13 |
+---+-----+-----+
在 SQL 中我会做类似的事情
SELECT ID,
Categ,
SUM (Count)
FROM Table
GROUP BY ID,
Categ;
但是如何在 Scala 中做到这一点? 我试过了
DF.groupBy($"ID", $"Categ").sum("Count")
但这只是将 Count 列名称更改为 sum(count),而不是实际给我计数的总和。
【问题讨论】:
-
你必须使用聚合并使用别名
df.groupBy("ID", "Categ").agg(sum("Amnt").as("Count")),当然你需要import org.apache.spark.sql.functions.sum:) -
@RameshMaharjan 的解决方案对我有用,但下面的解决方案没有。
-
@Amr A.,对于复杂的聚合(例如多个聚合)或重命名聚合列,需要用
agg包装聚合。请参阅我的扩展答案。
标签: scala apache-spark apache-spark-sql