使用循环在pyspark dataframe中添加多列

使用循环在pyspark dataframe中添加多列,dataframe,pyspark,multiple-columns,Dataframe,Pyspark,Multiple Columns,我需要在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)]) 不知道怎么了。感谢您的帮助。谢谢你尝试这样做: df2 = df3 for i in range(0, 4000): df2

我需要在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)])


不知道怎么了。感谢您的帮助。谢谢你

尝试这样做:

df2 = df3
for i in range(0, 4000):
  df2 = df2.withColumn(f"ftr{i}", lit(f"frt{i}"))
我们可以使用
.select()
而不是
.withColumn()
来使用列表作为输入,以创建与链接多个
.withColumn()
类似的结果。
[“*”]
还用于选择数据帧中的每个现有列

import pyspark.sql.F函数

df2:

df3=df2。选择([“*”]+[F.lit(F“{x}”).alias(F“ftr{x}”)作为范围(0,10)]内的x的别名。

结果:

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

我不这么认为。会的。它只会添加一个字段,即最后一个字段--ftr399:string(nullable=false)@renjith您是否确实尝试过运行它?。解决方案将添加所有列。注意,在循环中,我使用的是df2=df2.witthColumn,而不是df3=df2.withColumnYes,我运行了它。执行printschema时的输出是这个根|--hashval:string(nullable=true)|--dec_spec_str:string(nullable=false)|--dec_spec array(nullable=true)|--element:double(containsnall=true)|--ftr3999:string(nullable=false)它可以工作。不确定。为什么我尝试时它不起作用first@renjith这个循环是如何为你工作的。这对我也不起作用。
+---+----+----+----+----+----+----+----+----+----+----+
|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|
+---+----+----+----+----+----+----+----+----+----+----+