You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySpark中实现GroupBy分组后的排名操作

在PySpark中实现分组排名(对应Pandas的groupby.rank)

要在PySpark中实现你需要的分组排名功能,可以通过**窗口函数(Window)**完成,对应Pandas里df.groupby(["id", "hour"])["minute"].rank()的逻辑,具体实现如下:

1. 导入必要模块

from pyspark.sql import Window
from pyspark.sql.functions import rank

2. 定义窗口规范

按id和hour分组,每组内按minute升序排序:

window_spec = Window.partitionBy("id", "hour").orderBy("minute")

3. 生成排名列

使用rank()函数计算排名,和Pandas默认的无重复值场景下的排名逻辑完全匹配:

df_with_rank = df.withColumn("rank", rank().over(window_spec))

输入数据(PySpark DataFrame)

id      year  month date  hour  minute
54807   2021     12   31     6      29
54807   2021     12   31     6      31
54807   2021     12   31     7      15
54807   2021     12   31     7      30

执行后的输出结果

id      year  month date  hour  minute  rank
54807   2021     12   31     6      29  1
54807   2021     12   31     6      31  2
54807   2021     12   31     7      15  1
54807   2021     12   31     7      30  2

注:如果数据存在minute重复的情况,rank()会生成相同排名(如两个相同值都排1,下一个值排3);若需要和Pandasrank(method='first')一致的连续排名(即使重复也按出现顺序排1、2),可替换为row_number()函数。

内容的提问来源于stack exchange,提问作者Nabih Bawazir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:35:27