首页 > 解决方案 > Pyspark - 在 groupBy 之后返回选定的列。和聚合

问题描述

我在下面运行了这段代码,它返回了一个薪水值。但是,我希望它也能返回与最大值相关的其他列,所以我知道哪些类别包含数据集中的最大值。

df.groupBy().max('Salary').show() 

我试过df.select('Company','Employee','Salary').groupBy().max('Salary').show()了,但结果没有输出公司和员工。 在此处输入图像描述

标签: pythonpyspark

解决方案


Option1:用于window function这种情况并仅过滤掉最大值。

df.show()
#+----+----+-----+
#|col1|col2|value|
#+----+----+-----+
#|   1|   a|   10|
#|   2|   b|   20|
#+----+----+-----+

from pyspark.sql.functions import *
from pyspark.sql import *
import sys

w=Window.orderBy("value").rowsBetween(-sys.maxsize,sys.maxsize)

df.withColumn("mx",max(col("value")).over(w)).\
filter(expr('value == mx')).\
drop("mx").\
show()

#+----+----+-----+
#|col1|col2|value|
#+----+----+-----+
#|   2|   b|   20|
#+----+----+-----+

Option2: Without using window功能。

#get the max value then store into variable
max_val=df.agg(max("value")).collect()[0][0]

df.filter(col("value") == max_val).show()
#+----+----+-----+
#|col1|col2|value|
#+----+----+-----+
#|   2|   b|   20|
#+----+----+-----+

推荐阅读