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

Get records based on column max value - in PySpark

我有车 table 有数据

国家 汽车 价格
德国 奔驰 30000
德国 宝马 20000
德国 欧宝 15000
日本 本田 20000
日本 丰田 15000

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

国家 汽车 价格
德国 奔驰 30000
日本 本田 20000

我看到了类似的问题,但 SQL 中有解决方案,我想要 PySpark 数据帧的 DSL 格式(link 以防万一:

您需要 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')