我在下面运行了这段代码,它返回了一个工资单值。但是,我希望它还会返回与最大值关联的其他列,因此我知道哪些类别包含数据集中的最大值。
df.groupBy().max('Salary').show()
我尝试了df.select('Company','Employee','Salary').groupBy().max('Salary').show()
,但是结果没有输出Company和Employee。
答案 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|
#+----+----+-----+