簡體   English   中英

如何從列名列表中動態創建結構列?

[英]How to dynamically create a struct column from a list of column names?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM