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

PySpark日期过滤函数报错:如何基于输入日期筛选一年数据?

解决PySpark日期筛选报错“Column 'xxx' does not exist”的问题

问题原因

你代码里的to_date(st_date)把输入的字符串日期当成了列名,而非常量值。PySpark的to_date函数如果接收字符串参数,会默认解析为DataFrame中的列名,所以才会报错说找不到对应列。同时add_months返回的是Column类型,但这里需要的是基于输入日期计算的常量日期列,而非动态列。

解决方案

需要用lit()函数将输入的字符串日期包装成常量列,再进行日期转换和计算,这样PySpark就会把它当作固定值处理,而不是列名。

修正后的代码

from pyspark.sql.functions import to_date, add_months, lit

def one_year_data(df, st_date):
    # 将输入的字符串日期转为常量日期列
    start_date = to_date(lit(st_date))
    # 计算12个月后的结束日期(同样是常量列)
    end_date = add_months(start_date, 12)
    
    # 用常量日期列筛选数据
    df_filtered = df.filter((df.date >= start_date) & (df.date < end_date))
    
    return df_filtered

代码说明

  • lit(st_date):把输入的字符串st_date转换成PySpark的常量列,确保后续日期函数处理的是固定值,而非列名。
  • to_date(lit(st_date)):将常量字符串列转为日期类型列,匹配DataFrame中date列的类型。
  • 筛选条件df.date >= start_date & df.date < end_date:确保只保留从输入日期开始,到12个月内的记录(不包含结束日期当天),符合输入“2017-01-01”返回2017年全年记录的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:23:23