如何在Spark Datframes中使用GroupBy上的总和



基于以下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"))

相关内容

  • 没有找到相关文章