我有一个像这样的DataFrame df
:
df =
name group influence
A 1 2
B 1 3
C 1 0
A 2 5
D 2 1
对于group
的每个不同值,我想提取最大值为name
的{{1}}的值。
预期结果是这一个:
influence
我知道如何获得最大值,但我不知道如何获得group max_name max_influence
1 B 3
2 A 5
。
max_name
答案 0 :(得分:-3)
对于带有结构的groupBy
,有一个很好的替代方法 - 窗口函数,它有时真的更快。
对于你的考试,我会尝试以下方法:
import org.apache.spark.sql.expressions.Window
val w = Window.partitionBy('group)
val res = df.withColumn("max_influence", max('influence).over(w))
.filter('influence === 'max_influence)
res.show
+----+-----+---------+-------------+
|name|group|influence|max_influence|
+----+-----+---------+-------------+
| A| 2| 5| 5|
| B| 1| 3| 3|
+----+-----+---------+-------------+
现在您只需要删除无用的列并重命名剩余的列。 希望,这会有所帮助。