PySpark union() 및 unionAll() 함수는 동일한 스키마 또는 구조의 둘 이상의 DataFrame을 병합하는 데 사용된다. 그러면 union 과 unionAll 함수의 차이는 뭘 까?
결론적으로 말하자면 두 함수의 차이는 없다. Spark 2.0.0 버전부터는 unionAll()은 사용되지 않고 union으로 사용된다.
참고사항으로 SQL 언어에서 Union은 중복을 제거하지만 UnionAll은 중복 레코드를 포함한 두 개의 데이터 세트를 병합한다.
PySpark에서는 둘 다 동일하게 동작하며 DataFrame 중복을 제거하기 위해선 duplicate() 함수를 사용하는 것이 좋다.
import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
simpleData = [("James","Sales","NY",90000,34,10000), \
("Michael","Sales","NY",86000,56,20000), \
("Robert","Sales","CA",81000,30,23000), \
("Maria","Finance","CA",90000,24,23000) \
]
columns= ["employee_name","department","state","salary","age","bonus"]
df = spark.createDataFrame(data = simpleData, schema = columns)
df.printSchema()
df.show(truncate=False)
simpleData2 = [("James","Sales","NY",90000,34,10000), \
("Maria","Finance","CA",90000,24,23000), \
("Jen","Finance","NY",79000,53,15000), \
("Jeff","Marketing","CA",80000,25,18000), \
("Kumar","Marketing","NY",91000,50,21000) \
]
columns2= ["employee_name","department","state","salary","age","bonus"]
df2 = spark.createDataFrame(data = simpleData2, schema = columns2)
df2.printSchema()
df2.show(truncate=False)
unionDF = df.union(df2)
unionDF.show(truncate=False)
disDF = df.union(df2).distinct()
disDF.show(truncate=False)
+-------------+----------+-----+------+---+-----+
|employee_name|department|state|salary|age|bonus|
+-------------+----------+-----+------+---+-----+
|James |Sales |NY |90000 |34 |10000|
|Maria |Finance |CA |90000 |24 |23000|
|Kumar |Marketing |NY |91000 |50 |21000|
|Michael |Sales |NY |86000 |56 |20000|
|Jen |Finance |NY |79000 |53 |15000|
|Jeff |Marketing |CA |80000 |25 |18000|
|Robert |Sales |CA |81000 |30 |23000|
+-------------+----------+-----+------+---+-----+
unionAllDF = df.unionAll(df2)
unionAllDF.show(truncate=False)
+-------------+----------+-----+------+---+-----+
|employee_name|department|state|salary|age|bonus|
+-------------+----------+-----+------+---+-----+
|James |Sales |NY |90000 |34 |10000|
|Michael |Sales |NY |86000 |56 |20000|
|Robert |Sales |CA |81000 |30 |23000|
|Maria |Finance |CA |90000 |24 |23000|
|James |Sales |NY |90000 |34 |10000|
|Maria |Finance |CA |90000 |24 |23000|
|Jen |Finance |NY |79000 |53 |15000|
|Jeff |Marketing |CA |80000 |25 |18000|
|Kumar |Marketing |NY |91000 |50 |21000|
+-------------+----------+-----+------+---+-----+
300x250
반응형
'프로그래밍 > PySpark' 카테고리의 다른 글
[PySpark] 학습된 로지스틱 모형의 계수 확인하기. (0) | 2023.08.25 |
---|---|
[PySpark] array_intersect로 array간 같은 value값 찾기 (0) | 2023.08.21 |
[PySpark] explode, explode_outer 함수 차이 (0) | 2023.07.07 |
[PySpark] dense 벡터와 sparse 벡터, UDF로 sparse vector 만들기 (0) | 2023.06.08 |
[PySpark] array 값 합계 컬럼 생성하기 (0) | 2023.06.03 |