以下内容为我提供了一个TypeError: Column is not iterable
异常:
from pyspark.sql import functions as F
df = spark_sesn.createDataFrame([Row(col0 = 10,
col2 = 'ten',
col3 = 10.0),])
df.withColumn('key', F.lit('1')) # This succeeds.
df.withColumn(F.col('key'), F.lit('1')) # This causes an exception. <---- TypeError
您可能想知道为什么我要完全使用第二个版本。这是因为我需要访问.alias()
方法以将metadata
添加到该列,就像这样:
df.withColumn(F.col('key').alias('key', metadata={'foo':'bar'}), F.lit('1'))
我们如何使第二个版本生效并/或插入所需的metadata
?请记住,真实的DataFrame
已经存在(这意味着,我不能像在此简单示例中一样从头开始创建一个)。
谢谢! =:)
答案 0 :(得分:2)
withColumn
要求第一个参数为字符串,所以不要认为第二个选项可以工作;您可能只是使用select
添加具有别名的新列:
df.select("*", F.lit(1).alias("key", metadata={"foo": "bar"})).show()
+----+----+----+---+
|col0|col2|col3|key|
+----+----+----+---+
| 10| ten|10.0| 1|
+----+----+----+---+
或者您可以在使用alias
时在F.lit
上使用withColumn
:
df.withColumn("key", F.lit(1).alias(None, metadata={"foo": "bar"})).show()
+----+----+----+---+
|col0|col2|col3|key|
+----+----+----+---+
| 10| ten|10.0| 1|
+----+----+----+---+