将两个 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')
我有两个多列的 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')