8.1 조인 표현식
- 스파크는 왼쪽과 오른쪽 데이터셋에 있는 하나 이상의 키값을 비교하여 데이터셋을 조인 함
- 스파크는 일치하는 키가 없는 로우는 조인에 포함시키지 않음
8.2 조인 타입
- inner join
- outer join
- left outer join
- right outer join
- left semi join
- left anti join
- natural join
- cross join
- 예제를 위한 Data 생성
person = spark.createDataFrame([
(0, "Bill Chambers", 0, [100]),
(1, "Matei Zaharia", 1, [500, 250, 100]),
(2, "Michael Armbrust", 1, [250, 100])])\
.toDF("id", "name", "graduate_program", "spark_status")
graduateProgram = spark.createDataFrame([
(0, "Masters", "School of Information", "UC Berkeley"),
(2, "Masters", "EECS", "UC Berkeley"),
(1, "Ph.D.", "EECS", "UC Berkeley")])\
.toDF("id", "degree", "department", "school")
sparkStatus = spark.createDataFrame([
(500, "Vice President"),
(250, "PMC Member"),
(100, "Contributor")])\
.toDF("id", "status")
person.createOrReplaceTempView("person")
graduateProgram.createOrReplaceTempView("graduateProgram")
sparkStatus.createOrReplaceTempView("sparkStatus")
8.10 교차 조인 (카테시안 조인)
- 왼쪽 DF의 모든 로우를 오른쪽 DF의 모든 로우와 결합
- 1,000개의 로우가 존재하는 2개의 DF에 교차조인을 수행하면 1,000 * 1000개의 로우 결과가 생성
person.crossJoin(graduateProgram).show()
+---+----------------+----------------+---------------+---+-------+--------------------+-----------+
| id| name|graduate_program| spark_status| id| degree| department| school|
+---+----------------+----------------+---------------+---+-------+--------------------+-----------+
| 0| Bill Chambers| 0| [100]| 0|Masters|School of Informa...|UC Berkeley|
| 0| Bill Chambers| 0| [100]| 2|Masters| EECS|UC Berkeley|
| 0| Bill Chambers| 0| [100]| 1| Ph.D.| EECS|UC Berkeley|
| 1| Matei Zaharia| 1|[500, 250, 100]| 0|Masters|School of Informa...|UC Berkeley|
| 1| Matei Zaharia| 1|[500, 250, 100]| 2|Masters| EECS|UC Berkeley|
| 1| Matei Zaharia| 1|[500, 250, 100]| 1| Ph.D.| EECS|UC Berkeley|
| 2|Michael Armbrust| 1| [250, 100]| 0|Masters|School of Informa...|UC Berkeley|
| 2|Michael Armbrust| 1| [250, 100]| 2|Masters| EECS|UC Berkeley|
| 2|Michael Armbrust| 1| [250, 100]| 1| Ph.D.| EECS|UC Berkeley|
+---+----------------+----------------+---------------+---+-------+--------------------+-----------+
8.11 조인 사용시 문제점
- 복합 데이터 타입의 조인
ㄴ 불리언을 반환하는 모든 표현식은 조인 표현식으로 간주
- 중복 컬럼명 처리
ㄴ 조인 전에 중복된 컬럼을 삭제하거나, 컬럼명을 변경하여 문제 해결
8.12 스파크 조인 수행 방식
조인을 수행하는 두 가지 핵심 전략
- 노드간 네트워크 통신 전략
- 노드별 연산 전략
전체 노드 간 통신을 유발하는 셔플 조인과 그렇지 않은 브로드캐스트 조인
셔플 조인
큰 테이블과 큰테이블 간의 조인, 모든 워커 노드에서 통신(데이터 이동)이 발생
브로드캐스트 조인
큰 테이블과 작은 테이블 간의 조인, 작은 DF를 클러스터 전체 워커에 복제해 모든 워커노드에 통신이 발생하지 않게끔 함
'DataPipeline > Spark' 카테고리의 다른 글
스파크완벽가이드 - 10장 Spark SQL (0) | 2024.08.10 |
---|---|
스파크완벽가이드 - 9장 데이터 소스 (0) | 2024.08.07 |
스파크완벽가이드 - 6장 다양한 데이터 타입 다루기 (0) | 2024.07.27 |
스파크완벽가이드 - 5장 구조적 API 기본 연산 (0) | 2024.07.27 |
스파크완벽가이드 - 4장 구조적 API 개요 (0) | 2024.07.27 |