NYC*_*yes 2 python apache-spark apache-spark-sql pyspark
以下给了我一个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
Run Code Online (Sandbox Code Playgroud)
您可能想知道为什么我要使用第二种变体。这是因为我需要访问.alias()添加metadata到该列的方法,如下所示:
df.withColumn(F.col('key').alias('key', metadata={'foo':'bar'}), F.lit('1'))
Run Code Online (Sandbox Code Playgroud)
我们如何让第二个变体工作和/或插入metadata所需的?请记住,真实DataFrame已经存在(也就是说,我无法像在这个简单示例中那样从头开始创建)。
谢谢!=:)
withColumn要求第一个参数是字符串,所以不要认为第二个选项可以工作;您可能只是使用select别名添加一个新列:
df.select("*", F.lit(1).alias("key", metadata={"foo": "bar"})).show()
+----+----+----+---+
|col0|col2|col3|key|
+----+----+----+---+
| 10| ten|10.0| 1|
+----+----+----+---+
Run Code Online (Sandbox Code Playgroud)
或者你可以使用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|
+----+----+----+---+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3606 次 |
| 最近记录: |