- 스파크는 서로 다른 데이터를 조합할 수 있으므로 데이터를 처리할 때 기업의 여러 데이터소스를 활용할 수 있음
- 스파크가 지원하는 조인 타입과 사용법 그리고 실제 클러스터에서 어떻게 조인을 실행하는지 내부 동작 방식 다룸
조인 표현식
- 왼쪽과 오른쪽 데이터셋에 있는 하나 이상의 키값을 비교하고 왼쪽 데이터셋과 오른쪽 데이터셋의 결합 여부를 결정하는 조인 표현식의 평가 결과에 따라 두개의 데이터 셋을 조인
- 일치하는 키가 없는 로우는 조인에 포함시키지 않음
- 복합 데이터 타입을 조인에 사용할 수 있음
- ex) 배열 타입의 키에 조인할 키가 존재하는지 확인
조인 타입
- 결과 데이터셋에 어떤 데이터가 있어야 하는지 결정
- ex) 내부 조인, 외부 조인, 왼쪽 외부 조인, 왼쪽 세미 조인, 왼쪽 안티 조인, 자연 조인. 교차 조인
내부 조인
- DataFrame이나 테이블에 존재하는 키를 평가, 그리고 참으로 평가 되는 로우만 결합
### 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")
joinExpression = person["graduate_program"] == graduateProgram['id']
joinType = "inner"
person.join(graduateProgram, joinExpression, joinType).show()
외부조인
- DataFrame 이나 테이블에 존재하는 키를 평가하여 참이나 거짓으로 평가한 로우를 포함한다
- 왼쪽이나 오른쪽 DataFrame에 일치하는 로우가 없다면 해당 위치에 null 삽입
joinType = "outer"
person.join(graduateProgram, joinExpression, joinType).show()