📅  最后修改于: 2023-12-03 14:45:52.798000             🧑  作者: Mango
在 PySpark 中,完全外连接(full outer join)用于将两个数据框中的所有行组合在一起,包括两个数据框中不具有匹配值的行。在本文中,我们将详细讨论 PySpark 中完全外连接操作。
首先,我们创建两个数据框作为示例数据:
from pyspark.sql import SparkSession
from pyspark.sql.functions import expr
spark = SparkSession.builder.appName("FullOuterJoinExample").getOrCreate()
# 创建第一个 DataFrame
data1 = [("Alice", 1), ("Bob", 2), ("Charlie", 3), ("Dave", 4)]
columns1 = ["Name", "Age"]
df1 = spark.createDataFrame(data=data1, schema=columns1)
# 创建第二个 DataFrame
data2 = [("Bob", "Sales"), ("Charlie", "Marketing"), ("Edward", "HR"), ("Frank", "Operations")]
columns2 = ["Name", "Department"]
df2 = spark.createDataFrame(data=data2, schema=columns2)
上述代码中,我们使用 SparkSession
创建了两个数据框 df1
和 df2
,并将它们分别命名为示例数据。现在,我们可以在这两个数据框上进行完全外连接操作。
使用 df1.join(df2, on=['Name'], how='full')
函数对两个数据框进行完全外连接操作:
full_outer_join_df = df1.join(df2, on=['Name'], how='full')
full_outer_join_df.show()
输出结果为:
+-------+----+----------+
| Name| Age|Department|
+-------+----+----------+
|Charlie| 3| Marketing|
| Bob| 2| Sales|
| Dave| 4| null|
|Edward |null| HR|
| Alice| 1| null|
| Frank|null|Operations|
+-------+----+----------+
从输出结果可以看出,在完全外连接过程中,数据框 df1
和 df2
中所有的行都被包括在了结果数据框中。
需要注意的是,在完全外连接操作中,如果两个数据框中存在相同的列名,我们需要使用 Python 表达式 expr('
dataframe.
column')
将列名明确指定,避免出现冲突,例如:
full_outer_join_df = df1.join(df2, expr('df1.`Name` = df2.`Name`'), how='full')
本文介绍了在 PySpark 中如何进行完全外连接操作。我们首先创建了两个数据框作为示例数据,然后通过 df1.join(df2, on=['Name'], how='full')
函数进行完全外连接操作。最后,我们强调了在完全外连接操作中,需要确保两个数据框中相同的列名不发生冲突,避免出现错误。