我正在将Spark与Scala结合使用,并试图找到按键对Dataset
进行分组的最佳方法,并求平均值和。
例如,
Dataset[Player]
和Player
包括:playerId,yearSignup,level和points。groupByKey(p=>p.yearSignup)
和reduceGroups(p1,p2)
,我可以获得点的总和:(p1.points ++ p2.points)
和reduceLeft
。但是如何获得平均水平?我应该先对其求和,然后再对该组求和再除吗? 或者还有另一种方法可以做到这一点。
答案 0 :(得分:0)
groupby
之后,.agg
和sum
都可以使用avg
。 (see docs)
import org.apache.spark.sql.functions._
Player
.groupBy($"yearSignup")
.agg(
avg($"level").as("avg_level")
sum($"points").as("total_points")
)