PySpark创建数组列报错:TypeError: 'list' object is not callable 求解
解决PySpark中使用
array()函数创建数组列时的TypeError问题 嘿,这个错误我之前也踩过坑!问题根源很明确——你不小心覆盖了PySpark的array()函数:大概率是之前的代码里把array当成变量名用了(比如写过array = [1,2,3]这种),导致之后调用array()的时候,Python以为你要调用一个列表对象,而不是PySpark的内置函数,所以才抛出TypeError: 'list' object is not callable的错误。
解决方案步骤:
- 排查并修改同名变量:先扫一遍你的代码,找到所有把
array作为变量名的地方,把变量名改成别的(比如my_array),彻底避免和PySpark的函数名冲突。 - 确认导入
array函数:在代码开头确保已经正确导入PySpark的array函数:from pyspark.sql.functions import array - 重新执行你的代码:
new = df.select("col0", array("col1", "col2", "col3").alias("col1"))
额外的保险方案(避免冲突)
如果不想修改现有变量名,也可以用别名导入PySpark函数库,通过别名调用array,彻底避开命名冲突:
import pyspark.sql.functions as F new = df.select("col0", F.array("col1", "col2", "col3").alias("col1"))
完整测试示例
这里给你一个可直接运行的验证示例,用来确认效果:
from pyspark.sql import SparkSession from pyspark.sql.functions import array # 初始化SparkSession spark = SparkSession.builder.appName("CreateArrayColumn").getOrCreate() # 创建测试DataFrame data = [(1, "a", "b", "c"), (2, "d", "e", "f")] df = spark.createDataFrame(data, ["col0", "col1", "col2", "col3"]) # 生成数组列 new_df = df.select("col0", array("col1", "col2", "col3").alias("col1")) # 查看结果 new_df.show()
运行后会输出你期望的结果:
+----+---------+ |col0| col1| +----+---------+ | 1|[a, b, c]| | 2|[d, e, f]| +----+---------+
内容的提问来源于stack exchange,提问作者Onkar Jadhav
相关产品推荐
相关产品推荐

