pyspark - 在 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。谁能告诉我为什么会这样?谢谢!
解决方案
根据这个答案,您必须使用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)
推荐阅读
- java - Xmlpdf - 如何获得白色(或不可见)可选文本
- c# - Update Facebook app id and app secret without restarting ASP.NET MVC application
- javascript - 是否可以只滚动图像而不是整个站点而没有位置:粘性?
- php - Doctrine mapping: many-to-one join by `object_id` and `object_type = CONST`
- angular - Jhipster 7.0 - Google Material BrowserAnimationsModule addition throwing authentication exception
- xamarin.forms - ScrollView 作为自定义控件
- ffmpeg - LSB 隐写术是否会永久改变图像的像素?
- c# - 从枚举值创建类属性名称
- c# - Webview2 ExecuteScriptAsync 单击输入按钮
- css - 如何使元素在vue组件中随动画出现和消失?