我有一个100列的数据框架:
root
|-- column1
|-- column2
|-- column3
|-- column4
|-- column5
我有一个列名称列表:
struct_list =[‘column4’,‘column3’,‘column2]
预期模式:
root
|-- column1
|-- column2
|-- column3
|-- column4
|-- column5
|-- prev_val
|-- column4
|-- column3
|-- column2
目前我硬编码的值,如:
df=df.withColumn("prev_val",f.struct(f.col("column4"),f.col("column3"),f.col("column2"))
有没有一种方法可以动态地传递列表中的值?
可以使用列表推导式:
import pyspark.sql.functions as f
struct_list = ['column4','column3','column2']
df2 = df.withColumn(
"prev_val",
f.struct(*[f.col(c) for c in struct_list])
)
实际上你甚至不需要f.col
。您可以直接传递列名:
df2 = df.withColumn(
"prev_val",
f.struct(*struct_list)
)