我的目的是做相当于基本的sql
select shipgrp, shipstatus, count(*) cnt
from shipstatus group by shipgrp, shipstatus
我在spark数据帧中看到的示例包括其他列的汇总:例如
df.groupBy($"shipgrp", $"shipstatus").agg(sum($"quantity"))
但在上面显示的情况下,不需要其他列。那么这里的语法和/或方法调用组合是什么?
更新读者建议此问题与dataframe: how to groupBy/count then filter on count in Scala重复:但该问题是按count
进行过滤:此处没有过滤。
答案 0 :(得分:6)
您可以在spark count("*")
函数中同样执行agg
:
df.groupBy("shipgrp", "shipstatus").agg(count("*").as("cnt"))
val df = Seq(("a", 1), ("a", 1), ("b", 2), ("b", 3)).toDF("A", "B")
df.groupBy("A", "B").agg(count("*").as("cnt")).show
+---+---+---+
| A| B|cnt|
+---+---+---+
| b| 2| 1|
| a| 1| 2|
| b| 3| 1|
+---+---+---+