scala - Spark 数据集 - 平均函数
问题描述
我正在将 Spark 与 Scala 一起使用,并试图找到Dataset
按键分组的最佳方法,并将平均值 + 加起来。
例如,
- 我有
Dataset[Player]
,并且Player
包括: playerId , yearSignup , level , points 。 - 我想按 yearSignup 对这个数据集进行分组,并计算每年:点总和和平均水平。
- 所以用
groupByKey(p=>p.yearSignup)
, 和reduceGroups(p1,p2)
,我可以得到点的总和:(p1.points ++ p2.points)
用reduceLeft
.
但是如何获得平均水平呢?我应该先把它加起来,然后在那个组之后再划分它吗?或者还有另一种方法可以一起完成。
解决方案
在你之后groupby
,你可以.agg
同时使用sum
和avg
。(见文档)
import org.apache.spark.sql.functions._
Player
.groupBy($"yearSignup")
.agg(
avg($"level").as("avg_level")
sum($"points").as("total_points")
)
推荐阅读
- c# - 如何确定在 ASP.Net C# 中的 ListView 内单击 LinkButton 的行?
- reactjs - 使用 Chrome 开发者工具触发 React 事件
- digital-signature - 如何使用 pem 私钥签署 ECDSA?
- python - 如果下一步不存在,则尝试隐藏按钮
- c++ - C ++验证用户输入是单个字符
- python - 并非所有参数都在字符串格式化期间转换(Flask、ImageMagick 和 SQLAlchemy_ImageAttach)
- oracle - 将元素添加到可变数组数据类型
- postgresql - 将复杂的 postgresql 查询/子查询转换为 Rails activerecord 语法或将数组转换为活动记录关系?
- ajax - 如何在 amCharts4 请求中包含凭据?
- spark-structured-streaming - 如何订阅特定分区并从 Spark Structured Streaming 中的自定义偏移量中读取?