PySpark 2.4:TypeError:Column 不可迭代(使用 F.col() )



以下给了我一个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已经存在(这意味着,我不能像在这个简单示例中那样从头开始创建一个(。

谢谢!=:)

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|
+----+----+----+---+

最新更新