将两个 pyspark 数据框与仅保留唯一值的列组合连接起来

Join two pyspark dataframes with combination of columns keeping only unique values

我有两个多列的 pyspark 数据框。我想在每个数据帧的特定列上连接两个数据帧,并且需要生成的数据帧除了来自 df2 的新的唯一行之外还具有来自 df1 的所有值。

唯一性要根据所需列的组合来决定,例如在下面的场景中,采用的组合是Col2:Col7

df1:
Col1    Col2    Col3    Col4    Col5    Col6    Col7    Col8    Col9    Col10
94159   New     Store   Puma    Odd     East    Blue    Button  Zero    Max
421301  New     Store   Lexi    Even    West    Red     Button  Zero    Max
226024  New     Online  Puma    Odd     East    Blue    Button  Zero    Max
560035  Old     Store   Puma    Odd     East    Black   Button  Zero    Max

df2:
Col2    Col3    Col4    Col5    Col6    Col7    Col8    Col9    Col10
New     Store   Puma    Odd     East    Blue    Button  Zero    Max
New     Store   Lexi    Even    West    Red     Button  Zero    Max
New     Stock   Puma    Odd     East    Blue    Button  Zero    Max
Old     Online  Puma    Odd     East    Black   Button  Zero    Max

resultant_dataframe:
Col1    Col2    Col3    Col4    Col5    Col6    Col7    Col8    Col9    Col10
94159   New     Store   Puma    Odd     East    Blue    Button  Zero    Max
421301  New     Store   Lexi    Even    West    Red     Button  Zero    Max
226024  New     Online  Puma    Odd     East    Blue    Button  Zero    Max
560035  Old     Store   Puma    Odd     East    Black   Button  Zero    Max
null    New     Stock   Puma    Odd     East    Blue    Button  Zero    Max
null    Old     Online  Puma    Odd     East    Black   Button  Zero    Max

我正在使用以下方法:

resultant_dataframe = df1.join(df2, ['Col2', 'Col3', 'Col4', 'Col5', 'Col6', 'Col7'], 'left')
resultant_dataframe = resultant_dataframe.dropDuplicates(subset=['Col2', 'Col3', 'Col4', 'Col5', 'Col6', 'Col7'])

但是我遗漏了一些东西,因为所有唯一行都没有在结果数据框中得到更新。还有其他方法可以完成吗?

如果您进行左联接,它只会 return 来自左侧 df 的行,在本例中为 df1。

您应该将连接参数更改为完整:

resultant_dataframe = df1.join(df2, ['Col2', 'Col3', 'Col4', 'Col5', 'Col6', 'Col7'], 'full')