Spark:DataFrame如何在groupBy结果上使用Sum

时间:2017-12-21 19:18:10

标签: scala apache-spark spark-dataframe

基于以下数据框:

+---+-----+----+
| ID|Categ|Amnt|
+---+-----+----+
|  1|    A|  10|
|  1|    A|   5|
|  2|    A|  56|
|  2|    B|  13|
+---+-----+----+

我想从ID和分类中获取Amnt group列的总和。

+---+-----+-----+
| 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)而不是实际给出了计数总和。

由于

1 个答案:

答案 0 :(得分:7)

也许你在总结错误的列,但是你的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|
// +---+-----+---------+