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

Synapse Analytics PySpark中filter报错list对象不可调用的解决咨询

问题排查与解决:Synapse Analytics中DataFrame过滤报错及条件列添加

问题原因

你定义了名为col的列表变量col=['col_name'],这和Spark内置的pyspark.sql.functions.col函数重名了。执行df2.filter(col('col_name')=='dob')时,Python会优先调用你自定义的列表col,而非Spark的col函数,因此抛出“TypeError: list object is not callable”错误。

修复方案

方案1:重命名自定义变量

修改自定义列名列表的变量名,避免与Spark内置函数冲突:

df1 = df.columns
colName = []
for e in df1:
    list1 = [e]
    colName.append(list1)

# 重命名变量,规避函数名冲突
col_names = ['col_name']

df2 = spark.createDataFrame(colName, col_names)
display(df2)

# 现在可正常执行filter操作
display(df2.filter(col('col_name') == 'dob'))

方案2:明确调用Spark的col函数

若不想修改变量名,直接使用完整路径调用Spark内置函数:

display(df2.filter(pyspark.sql.functions.col('col_name') == 'dob'))

原代码简化优化(可选)

你原有的循环逻辑可以简化为一行代码,更高效简洁:

# 直接生成包含原列名的嵌套列表
colName = [[e] for e in df.columns]
col_names = ['col_name']
df2 = spark.createDataFrame(colName, col_names)

基于col_name添加条件列示例

修复后,可正常基于col_name列的值添加条件列,比如标记日期类型列:

from pyspark.sql.functions import when

df2 = df2.withColumn(
    'is_date_column',
    when(col('col_name').isin('dob', 'register_date'), 1).otherwise(0)
)
display(df2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:20:27