📜  PySpark 连接类型——连接两个 DataFrame(1)

📅  最后修改于: 2023-12-03 15:04:02.213000             🧑  作者: Mango

PySpark 连接类型——连接两个 DataFrame

在 PySpark 中,我们可以使用 join 操作连接两个 DataFrame,得到一个新的DataFrame。join 操作就是基于一些指定的列,将两个 DataFrame 分别的行进行组合。

PySpark 提供了多种连接类型,此处我们将介绍以下几种类型的连接:

  • inner join
  • left join
  • right join
  • outer join
inner join

Inner join 又称交集,这种连接方式会将两个 DataFrame 中都存在的指定列进行匹配,将匹配到的行合并,并返回合并后的 DataFrame。其语法如下:

df1.join(df2, on=['column_name'], how='inner')

其中,df1df2 是要连接的两个 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

Left join 又称左连接,会将左侧 DataFrame 所有行都保留,并将右侧 DataFrame 匹配到的行合并。右侧 DataFrame 匹配不到的行将被填充为 null。其语法如下:

df1.join(df2, on=['column_name'], how='left')

其中,df1df2 是要连接的两个 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

Right join 又称右连接,和 left join 相反,是将右侧 DataFrame 所有行都保留,并将左侧 DataFrame 匹配到的行合并。左侧 DataFrame 匹配不到的行将被填充为 null。其语法如下:

df1.join(df2, on=['column_name'], how='right')

其中,df1df2 是要连接的两个 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

Outer join 又称并集,将两个 DataFrame 中所有的行都保留,并将匹配到的行合并。两个 DataFrame 中不匹配的行将被填充为 null。其语法如下:

df1.join(df2, on=['column_name'], how='outer')

其中,df1df2 是要连接的两个 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 连接类型的介绍和示例,希望对你有所帮助!