【发布时间】:2021-07-18 23:35:36
【问题描述】:
我正在编写一个比较两个表的 PySpark 程序,比如说 Table1 和 Table2 两个表结构相同,但可能包含不同的数据
比方说,表 1 有以下列
key1, key2, col1, col2, col3
表1中的样本数据如下
"a", 1, "x1", "y1", "z1"
"a", 2, "x2", "y2", "z2"
"a", 3, "x3", "y3", "z3"
类似的表 2 有以下列
key1, key2, col1, col2, col3
表1中的样本数据如下
"a", 1, "x1", "y1", "z1"
"a", 2, "x21", "y21", "z2"
"a", 3, "x3", "y3", "z31"
程序创建一个包含以下列的数据框(比如说 df1)
Key1、Key2、a.Col1、a.Col2、a.Col3、b.Col1、b.Col2、b.Col3、column_names
示例数据:
"a", 2, "x2", "y2", "z2", "x21", "y21", "z2", "col1,col2"
"a", 3, "x3", "y3", "z3", "x3", "y3", "z31", "col3"
“column_names”列包含在 table1 和 table2 之间具有不同值的列
使用这个数据框,我需要创建另一个包含以下结构的数据框
key1、key2、field_in_difference、src_value、tgt_value
"a", 2, "col1", "x2", "x21"
"a", 2, "col2", "y2", "y21"
"a", 3, "col3", "z3", "z31"
我认为我需要在 PySpark 中使用 flatMap 我可以对数据框中的一列使用平面图,以便在结果数据框中创建多行吗?但剩余的列被复制到新行中?
我尝试使用以下语法,但语法似乎不正确
df2 = df1.withColumn("newcolumn", func.concat_ws(",", flatMap(lambda x: x.split(','))))
但我得到一个错误 NameErrorL name flatMap is not defined 不知道如何指定平面图需要在“column_names”列上完成,同时保持其余列不变..
我认为该方法是第一步在不同的列中创建一行 然后在第二步中,创建另一个将转换为预期输出的 df
非常感谢您的帮助
【问题讨论】:
标签: pyspark