PySpark用withColumn新增列报AssertionError:col should be Column问题
PySpark withColumn新增列报错解决方案
错误根因
withColumn方法第二个入参强制要求为Spark Column类型,直接传入Python原生字符串"why not!"不符合参数校验规则,触发AssertionError col should be Column报错- 只有Spark Column类型对象支持
cast类型转换方法,直接对Python原生字符串调用cast方法会触发str object does not have an attribute cast报错
正确实现
你第一行代码可以正常运行是因为已经通过lit()函数将Python原生数值转为了Spark Column类型,字符串类型的常量值也需要用lit()包裹:
# 需先导入lit函数 from pyspark.sql.functions import lit df = df.withColumn("SomeNumber", lit(123)) ## 正常运行 df = df.withColumn("SomeString", lit("why not!")) ## 修改后可正常运行
如果需要显式指定新增列的类型,可以在lit返回的Column对象上调用cast方法:
from pyspark.sql.functions import lit from pyspark.sql.types import StringType df = df.withColumn("SomeString", lit("why not!").cast(StringType()))
内容的提问来源于stack exchange,提问作者user16985119
相关产品推荐
相关产品推荐

