inflearn logo
강의

講義

知識共有

シリコンバレーのエンジニアから学ぶPython Apache Spark

Broadcast(ブロードキャスト)の紹介とブロードキャストジョイン方法を学ぶ

broadcast Join과 boradcast + UDF 차이

解決済みの質問

63

sgjeong1108

投稿した質問数 2

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"
)

감사합니다.

 

빅데이터 apache-spark

回答 2

0

altoformula

안녕하세요 sgjeong1108님,

좋은 질문이네요.

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

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

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

0

sgjeong1108

답변 감사합니다!

0

communityai8509

안녕하세요, 인프런 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에 대한 이해를 높이는 데 도움이 될 것입니다.

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

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

databricks에 cluster 메뉴가 없습니다.

0

49

2

주피터 사용 및 도커 설치

0

94

2

S3 폴더 구조에 따른 Static Partition Pruning, DPP 질문

0

77

2

append 모드 사용 시 집계

0

67

2

CDC 기반 스파크 아키텍처 구현 방법이 궁금합니다.

0

109

2

BroadCast 지원 가능 메모리 문의

0

90

2

rdd, dataframe, spark sql 각각 언제 사용할까요?

0

189

2

강의 후반부에 나온 실습 코드는 어디서 받을 수 있나요?

0

203

3

cdc 기반의 스트리밍 데이터 처리

1

231

2

broadcast 코드 예시 관련 질문

0

129

2

재생에 문제가 생겼어요 라는 메세지가 자꾸 뜨네요

0

116

1

스트리밍 예제 실행 시 py4j.protocol.Py4JNetworkError 발생

0

215

2

Repartition과 Coalesce에 대해 궁금한 점이 있어요!

1

166

1

pyspark 현업에서 로컬 개발 및 운영

1

338

1

Spark Structured Streaming Gracefully shutdown 질문

1

448

2

PySpark Runtime Architecture 내용 중 질문이 있습니다!

1

214

1

docker 설치 이후에 터미널 여는 부분에서 막혔습니다

1

461

2

app-<timestamp>-<executor_id> 폴더가 spark-events 내부에 생기게 하고 싶습니다.

1

277

1

pyspark.SparkContext 실행 오류 관련 질문

2

380

1

스파크 아키텍쳐 관련 문의 드립니다.

1

353

2

3.0에서 추가된 shuffle_hash, shuffle_replicate_nl hint는 어떤 상황에서 쓰는게 좋을까요?

1

320

1

데이터 엔지니터의 현 트렌드가 궁금합니다

1

473

1

스칼라강의도 제작하신다고 하셨는데 계획하고 계실까요??

1

298

2

pyspark / spark 차이점 질문드립니다.

1

1161

1