📌  相关文章
📜  PySpark 数据框中的完全外连接(1)

📅  最后修改于: 2023-12-03 14:45:52.798000             🧑  作者: Mango

PySpark 数据框中的完全外连接

在 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 创建了两个数据框 df1df2,并将它们分别命名为示例数据。现在,我们可以在这两个数据框上进行完全外连接操作。

完全外连接

使用 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|
+-------+----+----------+

从输出结果可以看出,在完全外连接过程中,数据框 df1df2 中所有的行都被包括在了结果数据框中。

需要注意的是,在完全外连接操作中,如果两个数据框中存在相同的列名,我们需要使用 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') 函数进行完全外连接操作。最后,我们强调了在完全外连接操作中,需要确保两个数据框中相同的列名不发生冲突,避免出现错误。