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

如何基于日期列年月值过滤数据及解决month()函数'int对象不可调用'报错

报错原因
  • 核心触发原因:你在代码中把month作为变量名赋值为整数,覆盖了PySpark内置的month日期处理函数,后续你尝试调用month()时,Python将其识别为整数变量而非函数,因此抛出"int object is not callable"报错。
  • 额外问题:你当前的日期转换代码本身存在多处错误,会导致后续日期处理失效:
    1. 日期格式符书写错误:日期格式中大写M代表月份,小写m代表分钟,你写的Mm/dd/yyyy为无效格式,会生成空值
    2. 语法错误:unix_timestamp方法缺少闭合的右括号
    3. 列名可能存在笔误:你转换时传入的字符串列名为ifrs_year_dr,如果实际列名是ifrs_year_dt会直接报错
解决方案
  1. 首先解决命名冲突问题,优先使用带前缀的函数调用方式避免覆盖,这也是PySpark开发的最佳实践:
# 导入函数库时统一加别名F
import pyspark.sql.functions as F

# 所有内置函数都通过F前缀调用,完全避免命名冲突
df = df.withColumn('month', F.month(df['ifrs_year_dt']))
df = df.filter(F.month(df['ifrs_year_dt']) == 3)

如果你已经赋值过month变量,可以执行del month删除该变量,或直接重启当前PySpark会话恢复month函数的默认引用。
2. 修复日期转换的错误代码,正确写法如下:

# 若你的原始字符串日期列名是ifrs_year_dt请自行替换
df = df.withColumn('ifrs_year_dt', F.to_date(F.unix_timestamp('ifrs_year_dr', 'MM/dd/yyyy').cast('timestamp')))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:15:03