如何从列名列表动态创建一个结构列?



我有一个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)
)

相关内容

最新更新