pyspark - Pyspark 动态转换列
问题描述
我正在使用 Pyspark 并尝试根据现有的输入数据框生成输出数据框
假设有一个数据框 df1 包含以下列
Key1, Key2, src_Col1, src_Col2, src_Col3, tgt_Col1, tgt_Col2, tgt_Col3, field_diff
示例数据:
"a", 2, "x2", "y2", "z2", "x21", "y21", "z2", "col1"
"a", 2, "x2", "y2", "z2", "x21", "y21", "z2", "col2"
"a", 3, "x3", "y3", "z3", "x3", "y3", "z31", "col3"
根据这个例子,第一行有 field_diff = "col1" ,这意味着列 src_col1 和 tgt_col1 不同。同样第二行有 field_diff = "col2" ,这意味着列 src_col2 和 tgt_col2 不同
使用这个数据框,我需要生成一个新的数据框,看起来像
key1, key2, field_diff, src_value, tgt_value
"a", 2, "col1", "x2", "x21"
"a", 2, "col2", "y2", "y21"
"a", 3, "col3", "z3", "z31"
如何将列“src_value”添加到 df1,它将包含第一行的列 src_col1 的值?即如何使用 df1.field_diff 中存在的列名来引用列值
请注意,我无法对列名进行硬编码,因为此逻辑将用于任何表名
我尝试使用以下语法,但似乎不正确
df2=df1.withColumn("SrcValue", lit(df1.select(col("src_"+df1.field_diff))))
解决方案
推荐阅读
- reactjs - 登录后 React-Router 重定向
- azure - Azure Logic App 条件检查空数组
- php - Laravel LiveWire 2:我们是否必须创建一个新类或者我们可以像传统控制器一样做
- flutter - 参数类型“Null”不能分配给参数类型“AccountState”
- typescript - 在 TypeScript 中分布箭头函数参数的联合
- reactjs - ReactJS:useEffect 在aws IVS chaannel的每个请求上更新元数据
- java - 如何在 JSESSIONID Cookie 中设置 SameSite=None
- c++ - 如何读取具有多个分隔符的文本文件?
- javascript - 测试文件中的 Jest Mock 导入
- selenium - WebdriverIO:检索浏览器日志记录