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

PySpark中使用partition by子句按双列分区取首行时报错求助

问题解决:PySpark按多列分区计算Row_Number并筛选首行
  • 错误原因:Window.partitionBy()的参数格式错误,你把两个列名合并成了单个字符串,PySpark会将其当作单个列名查找,因找不到对应列导致报错。
  • 正确实现代码:将多个分区列作为独立参数传入partitionBy(),同时完成行号计算与首行筛选,完整代码如下:
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

# 正确定义窗口:分区列分开传参,按销售额降序排序
windowSpec = Window.partitionBy("category_name", "SubCategoryName").orderBy("total_sales_360", ascending=False)

# 添加行号列并筛选行号为1的数据
result_df = df3.withColumn("row_num", row_number().over(windowSpec)).filter("row_num = 1")

# 查看最终结果
result_df.show(truncate=False)
  • 补充说明:
    • orderBy中ascending=False和直接写total_sales_360 desc功能等价,前者写法更直观
    • 筛选行号时,也可以用filter(col("row_num") == 1),但需要提前导入from pyspark.sql.functions import col

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:24:16