📅  最后修改于: 2023-12-03 15:34:03.905000             🧑  作者: Mango
在 PySpark 中,Union 和 UnionAll 都是用于合并两个数据集的操作,但它们在具体的合并方式上有所不同。
Union 操作用于合并两个数据集,同时删除重复数据(相同的行只会出现一次)。Union 操作的语法如下:
df1.union(df2)
其中,df1 和 df2 是要合并的两个数据集,Union 操作会将两个数据集按列合并,并返回一个新的数据集。需要注意的是,Union 操作会默认去重,如果需要保留重复数据,需要使用 UnionAll 操作。
UnionAll 操作也用于合并两个数据集,但不删除重复数据。UnionAll 操作的语法如下:
df1.unionAll(df2)
其中,df1 和 df2 是要合并的两个数据集,UnionAll 操作会将两个数据集按列合并,并返回一个新的数据集。
需要注意的是,UnionAll 操作返回的数据集可能存在重复数据,因此需要根据实际需求选择合适的操作。
示例代码:
from pyspark.sql import SparkSession
# 创建 SparkSession 对象
spark = SparkSession.builder.appName("UnionAndUnionAll").getOrCreate()
# 创建测试数据集
data1 = [("Alice", 25), ("Bob", 30), ("Cathy", 35)]
df1 = spark.createDataFrame(data1, ["name", "age"])
data2 = [("David", 40), ("Bob", 30), ("Eva", 45)]
df2 = spark.createDataFrame(data2, ["name", "age"])
# Union 操作
df_union = df1.union(df2)
print("Union:")
df_union.show()
# UnionAll 操作
df_union_all = df1.unionAll(df2)
print("UnionAll:")
df_union_all.show()
# 停止 SparkSession 对象
spark.stop()
输出结果:
Union:
+-----+---+
| name|age|
+-----+---+
|Alice| 25|
| Bob| 30|
|Cathy| 35|
|David| 40|
| Bob| 30|
| Eva| 45|
+-----+---+
UnionAll:
+-----+---+
| name|age|
+-----+---+
|Alice| 25|
| Bob| 30|
|Cathy| 35|
|David| 40|
| Bob| 30|
| Eva| 45|
+-----+---+
可以看到,Union 操作返回的数据集已经去重了,而 UnionAll 操作返回的数据集保留了重复数据。