当前位置: 首页 > 知识库问答 >
问题:

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

卫胜
2023-03-14

我有一个包含100列的数据框:

root
 |-- column1
 |-- column2
 |-- column3
 |-- column4
 |-- column5

我有一个列名列表:

结构列表=['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"))

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

共有1个答案

锺功
2023-03-14

您可以使用列表理解:

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)
)
 类似资料:
  • 问题内容: 我有一个字符串列表,例如: 我想为列表中的每个元素创建一个列表,该列表的名称应与字符串完全相同: 如何在Python中做到这一点? 问题答案: 你可以通过创建一个dict: 然后按(例如:)访问每个你不想走单独的变量之路!

  • 问题内容: 用Java创建链接列表的最佳方法是什么? 问题答案: 对于熟悉Java的开发人员来说,显而易见的解决方案是使用java.util中已经提供的LinkedList类。说,但是,由于某种原因,你想进行自己的实现。这是一个链接列表的快速示例,该链接列表在列表的开头插入新链接,从列表的开头删除并循环浏览列表以打印其中包含的链接。对此实现的增强包括使其成为双向链接列表,添加从中间或结尾插入和删除

  • 我有一个表,其列如下所示: 符号 区域 国家 位置 日期 计数 我创建了如下表: null 简单地说,我想要支持where子句中所有或任意数量列的表结构。 在卡桑德拉有可能做到这一点吗?

  • 我正在尝试创建列表列表,其中大列表表示纸张包含小列表表示问题的集合,问题列表由问题字符串及其ID组成。在这里我的代码: 现在我没有错误地制作问题列表,但是当我尝试创建更大的列表时,Visual Studio无法将可变问题类型识别为类型,哪里错了?

  • 我试图弄清楚如何通过使用与哥伦布()函数并在pySpark中的cp_codeset列()函数中调用udf来动态地为列表中的每个项目创建列(在这种情况下为列表)。下面是我写的代码,但它给了我一个错误。 另一种选择是手动执行它,但在这种情况下,我必须编写相同的udf函数并使用养分()函数调用它75次(这是cp_codeset["col_names"]的大小) 下面是我的两个数据帧,我正在尝试获得结果如

  • 问题内容: 我是python的初学者,并且满足在python脚本中动态声明/创建一些列表的要求。我需要在输入4时创建4个列表对象,例如depth_1,depth_2,depth_3,depth_4。 以便它可以动态创建列表。您能为我提供解决方案吗? 感谢你在期待 问题答案: 您可以使用或进行所需的操作。 为什么不使用清单清单?