根据列最大值获取记录 - 在 PySpark

Posted

技术标签:

【中文标题】根据列最大值获取记录 - 在 PySpark【英文标题】:Get records based on column max value - in PySpark 【发布时间】:2021-07-02 03:19:04 【问题描述】:

我有带有数据的汽车表

country car price
Germany Mercedes 30000
Germany BMW 20000
Germany Opel 15000
Japan Honda 20000
Japan Toyota 15000

我需要从表格中获取国家、汽车和价格,每个国家的最高价格

country car price
Germany Mercedes 30000
Japan Honda 20000

我看到了类似的问题,但 SQL 中有解决方案,我想要 PySpark 数据帧的 DSL 格式(链接以防万一:Get records based on column max value)

【问题讨论】:

【参考方案1】:

您需要row_numberfilter 才能实现如下所示的结果

df = spark.createDataFrame(
[
("Germany","Mercedes", 30000),
("Germany","BMW", 20000),
("Germany","Opel", 15000),
("Japan","Honda",20000),
("Japan","Toyota",15000)], 
("country","car", "price"))

from pyspark.sql.window import *
from pyspark.sql.functions import row_number, desc

df1 = df.withColumn("row_num", row_number().over(Window.partitionBy("country").orderBy(desc("price"))))


df2 = df1.filter(df1.row_num == 1).drop('row_num')

【讨论】:

以上是关于根据列最大值获取记录 - 在 PySpark的主要内容,如果未能解决你的问题,请参考以下文章

获取 PySpark 列中列表列表中第一个元素的最大值

MySQL根据列中的最大值获取行[重复]

pyspark - 使用最大值为一列创建一个从 0 到该值的行值循环,并为其重复其他列值

同时获取列的最大值和特定记录的同一列

具有列或行最大限制的 Pyspark 数据框

根据由另一列分组的不同列的最大值获取值[重复]