基于以下dataFrame:
+---+-----+----+
| ID|Categ|Amnt|
+---+-----+----+
| 1| A| 10|
| 1| A| 5|
| 2| A| 56|
| 2| B| 13|
+---+-----+----+
我想获得列的总和GroupBy ID和类别的总和。
+---+-----+-----+
| 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")
但这只是将计数列名称更改为 sum(count)
,而不是实际给我计数的总和。
也许您正在概括错误的列,但是您的grougBy/sum
语句对我来说是句法正确的:
val df = Seq(
(1, "A", 10),
(1, "A", 5),
(2, "A", 56),
(2, "B", 13)
).toDF("ID", "Categ", "Amnt")
df.groupBy("ID", "Categ").sum("Amnt").show
// +---+-----+---------+
// | ID|Categ|sum(Amnt)|
// +---+-----+---------+
// | 1| A| 15|
// | 2| A| 56|
// | 2| B| 13|
// +---+-----+---------+
编辑:
拒绝sum(Amnt)
列(或对于多个聚合),将聚合表达式用agg
包裹。例如:
// Rename `sum(Amnt)` as `Sum`
df.groupBy("ID", "Categ").agg(sum("Amnt").as("Sum"))
// Aggregate `sum(Amnt)` and `count(Categ)`
df.groupBy("ID", "Categ").agg(sum("Amnt"), count("Categ"))