📅  最后修改于: 2023-12-03 15:04:02.213000             🧑  作者: Mango
在 PySpark 中,我们可以使用 join 操作连接两个 DataFrame,得到一个新的DataFrame。join 操作就是基于一些指定的列,将两个 DataFrame 分别的行进行组合。
PySpark 提供了多种连接类型,此处我们将介绍以下几种类型的连接:
Inner join 又称交集,这种连接方式会将两个 DataFrame 中都存在的指定列进行匹配,将匹配到的行合并,并返回合并后的 DataFrame。其语法如下:
df1.join(df2, on=['column_name'], how='inner')
其中,df1
和 df2
是要连接的两个 DataFrame,column_name
是要匹配的列名,how
是连接类型,此处为 inner。
示例代码如下所示:
df1 = spark.createDataFrame([(1, 'John'), (2, 'Peter'), (3, 'Mary')], ['id', 'name'])
df2 = spark.createDataFrame([(1, 'New York'), (2, 'London'), (4, 'Paris')], ['id', 'city'])
df1.join(df2, on=['id'], how='inner').show()
输出结果为:
+---+-----+-------+
| id| name| city|
+---+-----+-------+
| 1| John|New York|
| 2|Peter| London|
+---+-----+-------+
Left join 又称左连接,会将左侧 DataFrame 所有行都保留,并将右侧 DataFrame 匹配到的行合并。右侧 DataFrame 匹配不到的行将被填充为 null。其语法如下:
df1.join(df2, on=['column_name'], how='left')
其中,df1
和 df2
是要连接的两个 DataFrame,column_name
是要匹配的列名,how
是连接类型,此处为 left。
示例代码如下所示:
df1 = spark.createDataFrame([(1, 'John'), (2, 'Peter'), (3, 'Mary')], ['id', 'name'])
df2 = spark.createDataFrame([(1, 'New York'), (2, 'London'), (4, 'Paris')], ['id', 'city'])
df1.join(df2, on=['id'], how='left').show()
输出结果为:
+---+-----+-------+
| id| name| city|
+---+-----+-------+
| 1| John|New York|
| 2|Peter| London|
| 3| Mary| null|
+---+-----+-------+
Right join 又称右连接,和 left join 相反,是将右侧 DataFrame 所有行都保留,并将左侧 DataFrame 匹配到的行合并。左侧 DataFrame 匹配不到的行将被填充为 null。其语法如下:
df1.join(df2, on=['column_name'], how='right')
其中,df1
和 df2
是要连接的两个 DataFrame,column_name
是要匹配的列名,how
是连接类型,此处为 right。
示例代码如下所示:
df1 = spark.createDataFrame([(1, 'John'), (2, 'Peter'), (3, 'Mary')], ['id', 'name'])
df2 = spark.createDataFrame([(1, 'New York'), (2, 'London'), (4, 'Paris')], ['id', 'city'])
df1.join(df2, on=['id'], how='right').show()
输出结果为:
+---+-----+-------+
| id| name| city|
+---+-----+-------+
| 1| John|New York|
| 2|Peter| London|
| 4| null| Paris|
+---+-----+-------+
Outer join 又称并集,将两个 DataFrame 中所有的行都保留,并将匹配到的行合并。两个 DataFrame 中不匹配的行将被填充为 null。其语法如下:
df1.join(df2, on=['column_name'], how='outer')
其中,df1
和 df2
是要连接的两个 DataFrame,column_name
是要匹配的列名,how
是连接类型,此处为 outer。
示例代码如下所示:
df1 = spark.createDataFrame([(1, 'John'), (2, 'Peter'), (3, 'Mary')], ['id', 'name'])
df2 = spark.createDataFrame([(1, 'New York'), (2, 'London'), (4, 'Paris')], ['id', 'city'])
df1.join(df2, on=['id'], how='outer').show()
输出结果为:
+---+-----+-------+
| id| name| city|
+---+-----+-------+
| 1| John|New York|
| 3| Mary| null|
| 2|Peter| London|
| 4| null| Paris|
+---+-----+-------+
以上便是 PySpark 连接类型的介绍和示例,希望对你有所帮助!