python - Pyspark - 在 groupBy 之后返回选定的列。和聚合
问题描述
我在下面运行了这段代码,它返回了一个薪水值。但是,我希望它也能返回与最大值相关的其他列,所以我知道哪些类别包含数据集中的最大值。
df.groupBy().max('Salary').show()
我试过df.select('Company','Employee','Salary').groupBy().max('Salary').show()
了,但结果没有输出公司和员工。
解决方案
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|
#+----+----+-----+
推荐阅读
- angular - Angular 5 在服务器端渲染上动态添加 amphtml 链接标签
- macos - OSX 通过终端从 ZIP 到 DMG 的一步转换?
- sql-server - ssrs 表达式中的新行
- java - 二级缓存中的休眠事务
- xamarin - 为什么 KeyWindow.AddSubview 会导致本机崩溃
- php - 会话无法从一个 php 页面到另一个页面
- javascript - javascript FullCalendar eventClick不起作用
- python - 如何在 python 中将 WITH 转换为 SELECT 查询表达式?
- silverstripe-4 - Silverstrip 4 显示有帖子的类别
- angularjs - select2 多个 ajax 调用