Spark报错TypeError: col should be Column问题求助
问题排查与解决
错误原因
df.where(df.ttu > 1).count()返回的是整数标量,但withColumn方法要求第二个参数必须是SparkColumn类型,直接传入整数就会触发TypeError: col should be Column。- Spark DataFrame是不可变结构,
df.withColumn调用后不会修改原DataFrame,必须将返回结果赋值给新变量才能生效。
修正方案
使用lit()函数将标量值转换为Spark Column类型,同时接收withColumn返回的新DataFrame:
from pyspark.sql.functions import lit def pos_values(df, metrics): # 统计符合条件的行数 num_pos_values = df.where(df.ttu > 1).count() # 用lit()将标量转为Column,生成带新列的DataFrame df_with_new_col = df.withColumn("loader_ttu_pos_value", lit(num_pos_values)) # 将处理后的DataFrame写入JSON df_with_new_col.write.json(metrics)
额外说明
lit()函数的作用是把Python标量值(整数、字符串等)转换成Spark可识别的Column类型,满足withColumn的参数要求。- 必须保留
withColumn返回的新DataFrame,原DataFrame不会被修改,直接使用原df写入的话,新列不会被包含。
内容的提问来源于stack exchange,提问作者Mike3355
相关产品推荐
相关产品推荐

