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

PySpark如何筛选当前月份(9月)及之前的所有月份列?

正确实现PySpark筛选当前月份及之前列的方法

原代码的问题

  • 类型比较错误:你试图将月份名称字符串(如"September")和数字类型的当前月份值(如9)直接比较,逻辑完全不成立,无法正确筛选月份。
  • 方法使用错误:filter()是用来筛选符合条件的行,而你需要的是保留指定列,应该使用select()方法。

正确实现步骤

  1. 获取当前月份的数字值(如9月对应9)。
  2. 从月份列表中截取当前月份及之前的所有月份名称。
  3. 使用select()选择这些列,得到目标结果。

完整代码示例

from pyspark.sql import functions as F
from datetime import datetime

# 定义12月份的完整列表,顺序对应1-12月
months = ["January", "February", "March", "April", "May", "June",
          "July", "August", "September", "October", "November", "December"]

# 动态获取当前月份数字(如9月返回9),如果是固定月份可直接赋值current_month_num = 9
current_month_num = datetime.now().month

# 截取需要保留的月份列:前current_month_num个元素(列表索引从0开始,正好对应1月到当前月)
selected_months = months[:current_month_num]

# 选择指定列生成结果DataFrame
result_df = df.select(*selected_months)

# 查看结果
result_df.show()

说明

  • 如果你的场景中当前月份是固定的9月,可直接跳过动态获取步骤,直接写selected_months = months[:9]。
  • select(*selected_months)中的*用于解包列表元素,将列表中的每个月份名称作为select()的参数传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:03:23