Spark数据集-平均功能

时间:2018-10-03 15:01:32

标签: scala apache-spark dataset apache-spark-dataset

我正在将Spark与Scala结合使用,并试图找到按键对Dataset进行分组的最佳方法,并求平均值和。

例如,

  • 我有Dataset[Player]Player包括:playerId,yearSignup,level和points。
  • 我想通过yearSignup对该数据集进行分组,并针对每年进行计算:总分和平均水平。
  • 因此,使用groupByKey(p=>p.yearSignup)reduceGroups(p1,p2),我可以获得点的总和:(p1.points ++ p2.points)reduceLeft

但是如何获得平均水平?我应该先对其求和,然后再对该组求和再除吗? 或者还有另一种方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

groupby之后,.aggsum都可以使用avg。 (see docs

import org.apache.spark.sql.functions._

Player
  .groupBy($"yearSignup")
  .agg(
    avg($"level").as("avg_level")
    sum($"points").as("total_points")
  )