以下内容给了我一个 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'))
我们如何让第二种变体工作和/或插入所需的元数据
?请记住,真正的 DataFrame
已经存在(这意味着,我无法像在这个简单示例中那样从头开始创建一个)。
谢谢! =:)
最佳答案
withColumn
要求第一个参数是字符串,所以不要认为第二个选项可以工作;您可能只需使用 select
添加带有别名的新列:
df.select("*", F.lit(1).alias("key", metadata={"foo": "bar"})).show()
+----+----+----+---+
|col0|col2|col3|key|
+----+----+----+---+
| 10| ten|10.0| 1|
+----+----+----+---+
或者,您可以在使用 withColumn
时在 F.lit
上使用 alias
:
df.withColumn("key", F.lit(1).alias(None, metadata={"foo": "bar"})).show()
+----+----+----+---+
|col0|col2|col3|key|
+----+----+----+---+
| 10| ten|10.0| 1|
+----+----+----+---+
关于python - PySpark 2.4 : TypeError: Column is not iterable (with F. col() 用法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54561072/