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

PySpark如何用DataFrame API实现dense_rank窗口函数替代SQL查询

PySpark DataFrame API 实现 dense_rank 窗口函数方案

实现步骤

1. 导入依赖模块

首先需要导入窗口类和对应的窗口函数:

from pyspark.sql import Window
from pyspark.sql.functions import dense_rank

2. 定义窗口规范

对应SQL中OVER (PARTITION BY c1 ORDER BY value ASC)的逻辑,定义窗口规则:

window_spec = Window.partitionBy("c1").orderBy("value")
  • partitionBy("c1"):指定按c1列分组,每组内独立计算排名
  • orderBy("value"):指定组内按value列升序排序,默认排序规则为升序,如需降序可调整为orderBy(col("value").desc()),使用col需要额外导入from pyspark.sql.functions import col

3. 链式调用完成查询

对应你提供的SQL逻辑,完整DataFrame写法如下:

# 若已将tmp_view注册为Spark临时视图,可通过spark.table读取;如有对应DataFrame变量直接替换即可
result_df = spark.table("tmp_view") \
    # 新增rank列,计算密集排名
    .withColumn("rank", dense_rank().over(window_spec)) \
    # 过滤排名前3的数据
    .filter("rank <= 3")

如果需要查看结果,执行result_df.show()即可,输出结果和你提供的SQL执行结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:36:02