강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

sgjeong1108님의 프로필 이미지
sgjeong1108

작성한 질문수

실리콘밸리 엔지니어에게 배우는 파이썬 아파치 스파크

Broadcast(브로드캐스트)의 소개와 브로드캐스트 조인 방법 알아보기

broadcast Join과 boradcast + UDF 차이

해결된 질문

작성

·

12

·

수정됨

0

안녕하세요!
좋은 강의 잘 듣고 있습니다!
강의를 듣던 중 궁금한게 생겨서 질문 남깁니다

UDF + broadcast 대신에 아래 방법으로 lookup테이블을 활용해서
BROADCAST JOIN한다면 스파크 내부적으로 다르게 동작하는지,
다르게 동작한다면 어떤 상황에서 각각 이점이 있는지 궁금합니다

lookup_df = spark.createDataFrame(
   [(k, v) for k, v in meta.items()],
    ["occupation_id", "occupation_name"]
)

df_result = interviewer_count.join(
    broadcast(lookup_df),
    on="occupation_id",
    how="left"
)

감사합니다.

 

답변 2

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 sgjeong1108님,

좋은 질문이네요.

일단 실행 계층 측면에서 봤을때, broadcast join은 JVM 내부에서 해시 조인, Whole-Stage Codegen 최적화를 가능하게 하지만 UDF + broadcast(파이썬 UDF)는 JVM와 Python를 계속 왕복해서 비효율적이며, 코드젠/컬럼너 실행도 비활성화되어있습니다.

또한 broadcast join는 카탈리스트 최적화, 통계, AQE 활용 가능해서 대체로 빠른 반면에, UDF + broadcast는 필터,프루닝,프레디킷 푸시다운 등 대부분 막혀서 느립니다.

결과적으로 기본은 항상 broadcast join로 설계를 하시되, Lookup 자체가 함수형 변환이어야 하거나, 외부 라이브러리를 꼭 써야 할때나... 조인으로 표현이 어려울 때는 UDF + broadcast를 사용하시면 됩니다.

sgjeong1108님의 프로필 이미지
sgjeong1108
질문자

답변 감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. sgjeong1108님.

Spark를 사용하면서 UDF + broadcastBROADCAST JOIN의 차이점을 잘 이해하는 것은 성능 최적화에 커다란 도움이 됩니다. 두 방법은 데이터의 처리 방식에 있어 차이가 있습니다.

Broadcast Join vs UDF + Broadcast

  1. Broadcast Join:

    • 작은 데이터를 브로드캐스트하여 전체 노드의 메모리에 복제합니다. 이렇게 하면 각 노드에서 작은 데이터셋을 빠르게 참조할 수 있어 성능이 향상됩니다.
    • 브로드캐스트 데이터가 충분히 작다면, Spark 클러스터의 각 노드에 데이터를 전송하여 조인의 병목을 줄일 수 있습니다. 이는 일반적으로 Join 연산에서 셔플링의 필요성을 줄여 성능을 높입니다.
    • broadcast()로 명시적인 브로드캐스트를 구현하면서 데이터의 크기가 특정 임계값보다 작을 경우에 적합합니다. Spark는 10MB를 기본 자동 브로드캐스트 임계값으로 사용합니다.
  2. UDF + Broadcast:

    • UDF는 사용자 정의 함수를 활용하여 각 레코드별로 연산을 수행합니다. 이는 개별 값을 참조하거나 변환할 때 유용합니다.
    • UDF 사용 시, 개별 레코드에 대해 브로드캐스트된 데이터를 참조하여 복잡한 로직을 처리할 수 있지만, 일반적으로 UDF는 Spark의 최적화(예: Catalyst optimizer)의 혜택을 받지 못해 성능에 있어 불리할 수 있습니다.
    • 데이터의 변환 혹은 특정 로직의 적용이 요구될 때 UDF를 사용하는 것을 고려합니다.

관련 질문 및 유용한 링크

  • 대용량 데이터 Join: 이 게시물에서는 Spark에서 데이터 Join 방법과 발생할 수 있는 문제점들, 그리고 이를 다루기 위해 고려할 수 있는 다양한 테크닉들에 대한 설명이 포함되어 있습니다. BROADCAST JOIN에 대한 이해를 높이는 데 도움이 될 것입니다.

실제로 사용하시는 시나리오에 따라 각 방법의 성능 차이가 있을 수 있습니다. 데이터 크기와 유형, 처리 요구사항에 따라 적절한 방법을 선택하시는 것이 중요합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sgjeong1108님의 프로필 이미지
sgjeong1108

작성한 질문수

질문하기