PySpark对DataFrame应用filter过滤时报AnalysisException错误求助
问题原因
- 常量日期未用
lit()包裹:PySpark内置SQL函数的参数如果直接传入字符串,默认会被识别为DataFrame的列名而非字面量。你代码内to_date("2020-01-10","YYYY-MM-DD")的第一个参数是固定日期字符串,没有用lit()函数包裹,导致Spark尝试在你的DataFrame中查找名为2020-01-10的列,触发列不存在的报错。 - 日期格式符使用错误:格式串中大写
DD代表年积日(即一年中的第N天),匹配月内天数需要使用小写dd,错误的格式符会导致后续日期解析、计算结果不符合预期。另外格式串中年份建议用小写yyyy(代表标准日历年),大写YYYY是基于周计算的年份,普通日期场景下使用会出现边界问题。
修正后可运行代码
from pyspark.sql.functions import * subtract_days=10 # 用lit包裹常量字符串,修正日期格式符,to_date返回结果已经是date类型,无需额外cast run_date = to_date(lit("2020-01-10"),"yyyy-MM-dd") df.filter(to_date(df["activity_day"],"yyyy-MM-dd") > date_sub(run_date,subtract_days)).show()
运行输出结果
+----+------------+ |cust|activity_day| +----+------------+ | 123| 2020-01-01| | 123| 2020-01-01| +----+------------+
内容的提问来源于stack exchange,提问作者user16798185
相关产品推荐
相关产品推荐

