더북(TheBook)

5.1.7 데이터 조인

 

서로 다른 두 DataFrame에 저장한 연관 데이터를 조인해 값이 공통된 로우들로 새로운 DataFrame을 만들어야 하는 경우가 많다. DataFrame을 조인하는 방법은 4장에서 살펴본 RDD 조인 방법과 크게 다르지 않다.

DataFrame을 조인하려면 한 DataFramejoin 함수에 다른 하나의 DataFrame을 전달하고, 하나 이상의 칼럼 이름 또는 Column 정의를 조인 기준으로 지정해야 한다. 칼럼 이름을 조인 기준으로 사용할 때는 해당 칼럼이 양쪽에 모두 있어야 한다. 반면 조인 기준으로 사용할 칼럼 이름이 서로 다르다면 Column 정의를 사용해야 한다. Column 정의를 사용하면 세 번째 인수에 조인 유형(예: inner, outer, left_outer, right_outer 또는 leftsemi)을 지정할 수 있다.

Note 조인 성능

스파크 매개변수 중 spark.sql.shuffle.partitions 변수는 셔플링을 실행한 이후(예: 조인 연산 이후) DataFrame이 사용할 파티션 개수를 지정한다. 이 변수의 기본 값은 200이지만(스파크 버전 2.2.1 기준), 사실 가장 적절한 설정 값은 활용 사례나 환경에 따라 다르다. 예를 들어 책의 예제를 실행할 때는 5~10개 파티션만 사용해도 충분하지만, 대규모 데이터셋을 다룰 때는 200개로도 부족하다. 파티션 개수를 변경하려면 셔플링 연산을 실제로 수행하기 전에(즉, 행동 연산자를 실행하기 전에) 이 매개변수를 조정해야 한다.

하지만 DataFrame의 파티션 개수를 특정 값으로 고정하는 것보다는 데이터와 런타임 환경에 따라 설정 값을 동적으로 결정하는 것이 이상적이다. 현재 JIRA 티켓 두 곳(https://goo.gl/3sxhfY, https://goo.gl/5EhN62)에서 이 문제 해법을 논의하고 있으므로 향후 스파크 릴리스에서는 상황이 달라질 것으로 기대한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.