运行PySpark代码报错TypeError: 'Column' object is not callable,求排查
问题分析与解决
你遇到的TypeError: 'Column' object is not callable错误,本质是代码中把Column对象当成函数调用了,结合你的代码来看,主要有以下几个可能的问题:
1. 导入冲突引发函数混淆
你同时用两种方式导入PySpark函数:
from pyspark.sql import functions as Ffrom pyspark.sql.functions import lead, add_months, trunc, max
这种写法本身不会直接报错,但如果后续代码中不小心将lead、max等函数名赋值给Column对象(比如lead = df["DP_AD_LST_MDFSN_DATE"]),就会导致调用F.lead时出现混淆,触发该错误。建议统一使用一种导入方式:要么全程用F.xxx调用函数,要么直接导入需要的函数,不要混合使用。
2. 缺失SparkSession导入
你的代码中创建SparkSession时使用了SparkSession.builder,但没有导入SparkSession类,这会引发NameError,虽然不是当前报错的直接原因,但也是代码中的潜在问题,需要补充导入语句。
修正后的代码
from pyspark.sql import SparkSession from pyspark.sql import functions as F from pyspark.sql.window import Window appName = "Example" master = "local[*]" spark = ( SparkSession .builder .appName(appName) .master(master) .enableHiveSupport() .getOrCreate() ) df = spark.read.table("user.test") generate_months = ( df .select( "DP_AD_ACCT_NBR", "DP_AD_CCY_CDE", "DP_AD_CURR_BAL", "DP_AD_LST_MDFSN_DATE", F.lead("DP_AD_LST_MDFSN_DATE", 1, F.current_date()).over( Window.partitionBy("DP_AD_ACCT_NBR","DP_AD_CCY_CDE") .orderBy("DP_AD_LST_MDFSN_DATE") ).alias("next_date") ) )
额外检查点
- 确认
DP_AD_LST_MDFSN_DATE等列在user.test表中确实存在,避免列名拼写错误。 - 确保PySpark版本支持
lead函数的第三个参数传入Column类型(PySpark 2.1及以上版本支持)。
内容的提问来源于stack exchange,提问作者user20984880
相关产品推荐
相关产品推荐

