如何获取具有最大参数值的组的名称?

时间:2018-02-09 13:17:12

标签: scala apache-spark spark-dataframe

我有一个像这样的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

1 个答案:

答案 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|
+----+-----+---------+-------------+

现在您只需要删除无用的列并重命名剩余的列。 希望,这会有所帮助。