首页 > 解决方案 > PySpark:查找项目是否在前 5 名中

问题描述

我有这样的销售清单(pySpark):

+---------+----------+
|productId|      date|
+---------+----------+
|      868|2020-11-01| 
|      878|2020-11-01| 
|      878|2020-11-01| 
|      913|2020-11-01|     
|      746|2020-11-01|     
|      878|2020-11-01|     
|      657|2020-11-02|        
|      746|2020-11-02|       
|      101|2020-11-02|       
+---------+----------+

所以,我想得到一个新列:按购买次数排列的项目位置。当天最受欢迎的项目将排名 1,等等。我尝试实现窗口功能,但不知道如何正确执行。最好的方法是什么?谢谢。

标签: pythondataframeapache-sparkpysparkapache-spark-sql

解决方案


import pyspark.sql.functions as F

count_per_day = F.count('productId').over(Window.partitionBy('date')).alias('count_per_day')
df = df.select('*', count_per_day)
rank = F.rank().over(Window.partitionBy('date').orderBy(F.col('count_per_day').desc())).alias('rank')
df = df.select('*', rank)

推荐阅读