根据列最大值获取记录 - 在 PySpark 中
Get records based on column max value - in PySpark
我有车 table 有数据
国家
汽车
价格
德国
奔驰
30000
德国
宝马
20000
德国
欧宝
15000
日本
本田
20000
日本
丰田
15000
我需要从 table 获取国家、汽车和价格,每个国家的最高价格
国家
汽车
价格
德国
奔驰
30000
日本
本田
20000
我看到了类似的问题,但 SQL 中有解决方案,我想要 PySpark 数据帧的 DSL 格式(link 以防万一:)
您需要 row_number
和 filter
才能获得如下结果
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')
我有车 table 有数据
国家 | 汽车 | 价格 |
---|---|---|
德国 | 奔驰 | 30000 |
德国 | 宝马 | 20000 |
德国 | 欧宝 | 15000 |
日本 | 本田 | 20000 |
日本 | 丰田 | 15000 |
我需要从 table 获取国家、汽车和价格,每个国家的最高价格
国家 | 汽车 | 价格 |
---|---|---|
德国 | 奔驰 | 30000 |
日本 | 本田 | 20000 |
我看到了类似的问题,但 SQL 中有解决方案,我想要 PySpark 数据帧的 DSL 格式(link 以防万一:
您需要 row_number
和 filter
才能获得如下结果
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')