我想根据排名列在 DataFrame 中添加一些新列
所以,我有这张 table
我想对三辆最昂贵的汽车进行分组存储并创建三个新列,如下所示:
我尝试进行排序并制作这样的收集列表:
grouped_df.groupBy('Store').agg(F.collect_list("car")).show()
但它返回一个无序数组
我是 PySpark 的新手,我不知道如何处理它
最佳答案
首先执行过滤器,仅保留每个商店最昂贵的汽车,然后执行groupby.pivot
:
import pyspark.sql.functions as f
(df.filter(df.rank <= 3)
.withColumn('col', f.expr('concat(rank, "_most_exp_car")'))
.groupby('Store')
.pivot('col')
.agg(f.first(df.Car))
).show()
+------+--------------+--------------+--------------+
| Store|1_most_exp_car|2_most_exp_car|3_most_exp_car|
+------+--------------+--------------+--------------+
|Carl's| Golf| HB20| Opala|
| Joe's| Corolla| HB20| Beetle|
+------+--------------+--------------+--------------+
关于python - PySpark 根据排名创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68479495/