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

时间:2019-02-06 19:20:51

标签: python apache-spark pyspark apache-spark-sql

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

谢谢! =:)

1 个答案:

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