首页 > 解决方案 > 在 Pyspark 中合并 2 个数据框

问题描述

我有 2 个数据框,如下所示:

DF1:

Id | field_A | field_B | field_C | field_D
 1 |   cat   |  12     |   black | 11
 2 |   dog   | 128     |   white | 19
 3 |   dog   |  35     |  yellow | 20
 4 |   dog   |  21     |   brown |  4
 5 |  bird   |  10     |    blue |  7
 6 |   cow   |  99     |   brown | 34

DF2:

Id | field_B | field_C | field_D | field_E
 3 |  35     |  yellow | 20      |   123   
 5 |  10     |    blue |  7      |   454   
 6 |  99     |   brown | 34      |   398   

左合并后,我希望得到以下数据框:

Id | field_A | field_B | field_C | field_D | field_E
 1 |   cat   |  12     |   black | 11      |
 2 |   dog   | 128     |   white | 19      |
 3 |   dog   |  35     |  yellow | 20      |  123
 4 |   dog   |  21     |   brown |  4      |  
 5 |  bird   |  10     |    blue |  7      |  454
 6 |   cow   |  99     |   brown | 34      |  398

但我得到以下数据框:

Id | field_A | field_B | field_C | field_D | field_E 
 3 |   dog   |  35     |  yellow | 20      |  123
 5 |  bird   |  10     |    blue |  7      |  454
 6 |   cow   |  99     |   brown | 34      |  398

我正在使用以下语法:

new_df = df1.join(df2, on=['field_B', 'field_C', 'field_D'], how='left_outer')

我正在研究火花2.2。谁能告诉我为什么会这样?谢谢!

标签: pyspark

解决方案


根据这个答案,您必须使用unionDFs下面链接中的功能,然后groupby. https://stackoverflow.com/a/50665187/6645617

这是执行此操作的示例代码:

from pyspark.sql.functions import first

unionDF = unionDFs(DF1,DF2)
firstCols = [first(col).alias(str(col)) for col in unionDF.columns[1:]]

finalDF = unionDF.groupby("Id").agg(*firstCols)

推荐阅读