📜  Python PySpark – Union 和 UnionAll(1)

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

Python PySpark - Union 和 UnionAll

在 PySpark 中,Union 和 UnionAll 都是用于合并两个数据集的操作,但它们在具体的合并方式上有所不同。

Union

Union 操作用于合并两个数据集,同时删除重复数据(相同的行只会出现一次)。Union 操作的语法如下:

df1.union(df2)

其中,df1 和 df2 是要合并的两个数据集,Union 操作会将两个数据集按列合并,并返回一个新的数据集。需要注意的是,Union 操作会默认去重,如果需要保留重复数据,需要使用 UnionAll 操作。

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 操作返回的数据集保留了重复数据。