【发布时间】:2018-11-06 22:44:36
【问题描述】:
我在 Spark 方面相当缺乏经验,需要有关 groupBy 和数据帧上的聚合函数的帮助。考虑以下数据框:
val df = (Seq((1, "a", "1"),
(1,"b", "3"),
(1,"c", "6"),
(2, "a", "9"),
(2,"c", "10"),
(1,"b","8" ),
(2, "c", "3"),
(3,"r", "19")).toDF("col1", "col2", "col3"))
df.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| a| 1|
| 1| b| 3|
| 1| c| 6|
| 2| a| 9|
| 2| c| 10|
| 1| b| 8|
| 2| c| 3|
| 3| r| 19|
+----+----+----+
我需要按 col1 和 col2 分组并计算 col3 的平均值,我可以使用:
val col1df = df.groupBy("col1").agg(round(mean("col3"),2).alias("mean_col1"))
val col2df = df.groupBy("col2").agg(round(mean("col3"),2).alias("mean_col2"))
但是,在具有几百万行和几万列中要分组的唯一元素的大型数据帧上,这需要很长时间。此外,我还有更多列要分组,而且花费的时间非常长,我希望减少这些列。有没有更好的方法来做 groupBy 后跟聚合?
【问题讨论】:
标签: scala apache-spark group-by aggregate aggregate-functions