Pyspark-在groupBy之后返回选定的列。和agg

时间:2020-08-18 15:45:40

标签: python pyspark

我在下面运行了这段代码,它返回了一个工资单值。但是,我希望它还会返回与最大值关联的其他列,因此我知道哪些类别包含数据集中的最大值。

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

我尝试了df.select('Company','Employee','Salary').groupBy().max('Salary').show(),但是结果没有输出Company和Employee。 enter image description here

1 个答案:

答案 0 :(得分:0)

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|
#+----+----+-----+