【问题标题】:How to dynamically create a struct column from a list of column names?如何从列名列表中动态创建结构列?
【发布时间】:2021-02-03 21:04:04
【问题描述】:

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

有没有一种方法可以动态传递列表中的值?

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql


    【解决方案1】:

    您可以使用列表推导:

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

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 2014-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2011-04-14
      • 1970-01-01
      相关资源
      最近更新 更多