📅  最后修改于: 2023-12-03 15:23:15.753000             🧑  作者: Mango
在 PySpark 中,数据合并是非常常见的操作。它允许我们将两个不同的数据集合并成一个,以进行更加全面和深入的数据分析和挖掘。在本文中,我们将介绍如何在 PySpark 中合并两个数据帧。
PySpark 数据帧是一种基于分布式计算框架 Spark 的数据结构,具有表格的特点。数据帧包含多个命名列,每个列可以包含不同类型的数据。PySpark 数据帧结构类似于 Pandas 中的数据帧。
PySpark 提供了两种数据帧合并方式,unionAll
和 join
。
unionAll
方法允许我们将两个数据帧合并成一个。要使用此方法,我们可以使用以下语法:
df3 = df1.unionAll(df2)
其中,df1
和 df2
是要合并的两个数据帧,df3
是合并后的结果。
以下是一个具体的示例:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("MergeDataFrame").getOrCreate()
data1 = [("John", "Smith", 34), ("Jane", "Doe", 30), ("James", "Bond", 45)]
data2 = [("Emily", "Bronte", 25), ("Mark", "Twain", 50), ("William", "Faulkner", 40)]
df1 = spark.createDataFrame(data1, ["first_name", "last_name", "age"])
df2 = spark.createDataFrame(data2, ["first_name", "last_name", "age"])
df3 = df1.unionAll(df2)
df3.show()
输出:
+----------+---------+---+
|first_name|last_name|age|
+----------+---------+---+
| John| Smith| 34|
| Jane| Doe| 30|
| James| Bond| 45|
| Emily| Bronte| 25|
| Mark| Twain| 50|
| William| Faulkner| 40|
+----------+---------+---+
join
方法允许我们根据某个键将两个数据帧合并。在使用 join
方法时,我们需要指定两个数据帧中要进行匹配的列。 join
方法支持多种不同类型的 join,例如 inner join、left join、right join 和 outer join。
以下是一个具体的示例:
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
spark = SparkSession.builder.appName("MergeDataFrame").getOrCreate()
data1 = [("John", "Smith", 34), ("Jane", "Doe", 30), ("James", "Bond", 45)]
data2 = [("John", "Smith", "London"), ("Jane", "Doe", "New York"), ("Alice", "Wonderland", "Paris")]
df1 = spark.createDataFrame(data1, ["first_name", "last_name", "age"])
df2 = spark.createDataFrame(data2, ["first_name", "last_name", "city"])
# 使用 inner join
df3 = df1.join(df2, (df1.first_name == df2.first_name) & (df1.last_name == df2.last_name))
df3.show()
输出:
+----------+---------+---+----------+---------+-----+
|first_name|last_name|age|first_name|last_name| city|
+----------+---------+---+----------+---------+-----+
| John| Smith| 34| John| Smith|London|
| Jane| Doe| 30| Jane| Doe| New York|
+----------+---------+---+----------+---------+-----+
以上代码中的第三个数据帧 df3
是通过将 df1
和 df2
进行内连接来创建的,即仅返回两个数据帧中都存在的行。
在 PySpark 中,我们可以通过 unionAll
方法或 join
方法将两个数据帧合并成一个。 unionAll
方法将两个数据帧堆叠在一起,而 join
方法则根据特定的列将两个数据帧合并。根据我们的需求,我们可以选择使用一个方法或另一个方法。