PySpark如何循环生成2000-2015年零值列?报错解决
解决PySpark添加常量列的AttributeError问题
错误原因
你代码里的"0".alias(f'm{i}')是直接对字符串调用alias方法,但字符串不是PySpark的Column对象,自然没有这个方法,所以触发了AttributeError。
修复方案
需要用PySpark的lit()函数创建一个值为0的常量列,再给这个列设置别名。步骤如下:
- 先导入
lit函数:
from pyspark.sql.functions import lit
- 修改你的select语句:
df = df.select( '*', *[lit(0).alias(f'm{i}') for i in range(start, end + 1)] ) df.show()
完整可运行示例
from pyspark.sql import SparkSession from pyspark.sql.functions import lit # 初始化SparkSession spark = SparkSession.builder.appName("AddConstantColumns").getOrCreate() # 创建原始DataFrame data = [("hello", "world", 1)] df = spark.createDataFrame(data, ["a", "b", "c"]) # 定义年份范围 start = 2000 end = 2015 # 添加常量列 df = df.select( '*', *[lit(0).alias(f'm{i}') for i in range(start, end + 1)] ) # 展示结果 df.show(truncate=False)
运行这段代码后,就能得到你想要的包含m2000到m2015列、值全为0的DataFrame。
内容的提问来源于stack exchange,提问作者lunbox
相关产品推荐
相关产品推荐

