python - 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,等等。我尝试实现窗口功能,但不知道如何正确执行。最好的方法是什么?谢谢。
解决方案
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)
推荐阅读
- python - 如何使绘图更大的 Python Jupyter 笔记本
- xamarin - Uno 平台:Droid 项目,复制所有代码
- godot - Godot:MultiMesh在脚本创建时会自行删除
- flutter - Flutter StatefulWidget 获取下拉按钮的值
- c# - C# 非静态字段、方法或属性“HttpContext.Request”需要对象引用
- python - 如果类似匹配和处理,则检测 pandas 列名
- r - Is it possible to authenticate dropbox automatically inside a shinyapps.io instance?
- scala - 在 Scala 2.11+ 反射中,如何可靠地将 TypeTag 和 Manifest 相互转换?
- python-3.x - python不会让我导入模块
- python - django 了解与主模型关联的子模型