【发布时间】:2020-10-31 22:47:31
【问题描述】:
我需要在 pyspark 的数据框中添加一些列(4000)。我正在使用withColumn 函数,但出现断言错误。
df3 = df2.withColumn("['ftr' + str(i) for i in range(0, 4000)]", [expr('ftr[' + str(x) + ']') for x in range(0, 4000)])
不知道哪里出了问题。
【问题讨论】:
我需要在 pyspark 的数据框中添加一些列(4000)。我正在使用withColumn 函数,但出现断言错误。
df3 = df2.withColumn("['ftr' + str(i) for i in range(0, 4000)]", [expr('ftr[' + str(x) + ']') for x in range(0, 4000)])
不知道哪里出了问题。
【问题讨论】:
我们可以使用.select() 而不是.withColumn() 来使用列表作为输入来创建类似于链接多个.withColumn() 的结果。 ["*"] 还用于选择数据框中的每个现有列。
import pyspark.sql.functions as F
df2:
+---+
|age|
+---+
| 10|
| 11|
| 13|
+---+
df3 = df2.select(["*"] + [F.lit(f"{x}").alias(f"ftr{x}") for x in range(0,10)])
结果:
+---+----+----+----+----+----+----+----+----+----+----+
|age|ftr0|ftr1|ftr2|ftr3|ftr4|ftr5|ftr6|ftr7|ftr8|ftr9|
+---+----+----+----+----+----+----+----+----+----+----+
| 10| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|
| 11| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|
| 13| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|
+---+----+----+----+----+----+----+----+----+----+----+
【讨论】:
尝试做这样的事情:
df2 = df3
for i in range(0, 4000):
df2 = df2.withColumn(f"ftr{i}", lit(f"frt{i}"))
【讨论】: