首页 > 解决方案 > 如何在 Spark 的另一列中找到每个唯一值的最大值?

问题描述

假设我有一个类似的数据集: 数据

我的最终产品需要在一周中的每一天与当天活动最多的地方排成一行。即 Mon Place A 56、Wed Place C 64 等。我尝试使用 Window 功能并且正在使用 max 和 groupie,但我让自己感到困惑。

标签: scalaapache-sparkpysparkapache-spark-sql

解决方案


Spark 3.0 引入了聚合函数max_by,它完全符合您的要求:

df.groupBy("day")
   .agg(expr("max_by(place, number)"), max('number))
   .show()

结果:

+-----+---------------------+-----------+
|  day|max_by(place, number)|max(number)|
+-----+---------------------+-----------+
|  Mon|              Place B|         42|
|  Wed|              Place F|         54|
|  Fri|              Place E|         64|
|Thurs|              Place D|         45|
+-----+---------------------+-----------+

推荐阅读