python - PySpark 2.4 : TypeError: Column is not iterable (with F. col() 用法)

标签 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'))

我们如何让第二种变体工作和/或插入所需的元数据?请记住,真正的 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/

相关文章:

hadoop - 使用AWS Hadoop集群设置提交作业

apache-spark - PySpark - 时间戳行为

Python如何将方法的结果转换为生成器

scala - 如何使用条件删除重复项

python - 基于 Python Web 框架中的 Accept header 路由请求

scala - 使用正则表达式基于另一个 RDD 过滤一个 RDD

apache-spark - 为什么 createDataFrame 对列重新排序?

python - 使用 Spark 检查日志

python - Pandas 滚动时间总和

python - 在 Python 上将日期格式 yyyy-m-d 转换为 yyyy-mm-dd