inflearn logo
강의

講義

知識共有

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

SparkのDynamic Partition Pruning(DPP)の利点を理解する

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

解決済みの質問

77

sgjeong1108

投稿した質問数 2

0

안녕하세요.

Static Partition Pruning이 가능한 폴더 구조에 대해서 궁금한 점이 있습니다.
Hive-Style(/year=2024/data.csv) 로 폴더를 구성해야 스파크에서 메타데이터에 year를 설정하고 Static Partition Pruning, DP가 가능하다고 하는데 맞을까요?

맞다면 Hive-Style의 폴더 구조가 아닌 상태의 데이터들을 대상으로도 Static Partition Pruning, DPP가 가능한지 궁금합니다.
ex.) Hive-style이 아닌 폴더 구조
/2024/data.csv
/2025/data.csv

감사합니다!

머신러닝 빅데이터 apache-spark iceberg

回答 2

0

altoformula

안녕하세요 sgjeong1108님,

Dynamic Partition Pruning(DPP)이 제대로 동작하려면 스파크가 "파티션 컬럼 -> 디렉터리 위치" 매핑을 메타데이터로 알고 있어야 합니다.

이 매핑을 알리는 일반적인 방법이 말씀하신 Hive-style 디렉터리(col=value/…) 이고, 이 경우 메타스토어가 없어도(그냥 spark.read.parquet만 해도) 자동 "파티션 디스커버리"가 됩니다

근데, Hive-style이 아니어도 됩니다. 다만 그 경우엔 메타스토어(또는 Delta/Iceberg 카탈로그) 에 파티션을 등록해 스파크가 매핑을 알게 해줘야 SPP/DPP가 작동합니다

만약 디렉토리가 /year=2024/data.parquet라면 다음과 같이 하시면 됩니다.

df.write
  .partitionBy("year")
  .mode("overwrite")
  .parquet("/path/to/data")

그게 아니라면 location을 사용하시면 됩니다.

CREATE EXTERNAL TABLE events (
  user_id BIGINT, ts TIMESTAMP, ...
)
PARTITIONED BY (year INT)
STORED AS PARQUET
LOCATION 's3://bucket/events';  -- 이거는 상위 루트

-- 폴더명이 'year=2024'가 아니어도 되요
ALTER TABLE events ADD PARTITION (year=2024) LOCATION 's3://bucket/events/2024';
ALTER TABLE events ADD PARTITION (year=2025) LOCATION 's3://bucket/events/2025';

 

0

communityai8509

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

Static Partition Pruning은 데이터베이스 나 데이터 처리 시스템에서 사용하는 최적화 기술로, 쿼리를 실행할 때 불필요한 데이터를 가능한 한 줄여서 성능을 향상시키는 방법입니다. 이 기술은 특히 대규모 데이터셋을 다룰 때 유용합니다.

간단히 설명하자면, Hive-Style 폴더 구조를 사용하면 Spark가 파티션을 인식하여 관련된 데이터만을 스캔할 수 있도록 도와줍니다. 이로 인해 데이터의 불필요한 스캔을 줄이고 쿼리 성능을 크게 향상시킬 수 있습니다. Hive-Style의 폴더 구조는 일반적으로 다음과 같은 형태입니다: /year=2024/data.csv.

질문에 주신 대로 Hive-Style 폴더 구조가 아닌 상태(예: /2024/data.csv)에서 Static Partition Pruning을 사용하는 것은 제한적일 수 있습니다. 비슷한 효과를 얻기 위해서는 사용자 정의 logic을 통해 메타데이터 관리를 해야 할 수도 있으며, 이는 단순히 Hive-Style 폴더 사용보다 복잡할 수 있습니다.

관련 질문과 답변에서 유사한 주제를 더 깊게 다루고 있습니다:
- cdc 기반의 스트리밍 데이터 처리
- parquet read시 partition 개수

이 두 질문은 데이터 파티셔닝과 관련된 개념과 최적화 기법에 대해 더 많은 정보를 제공할 수 있으니 참고해보세요.

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

databricks에 cluster 메뉴가 없습니다.

0

49

2

주피터 사용 및 도커 설치

0

94

2

broadcast Join과 boradcast + UDF 차이

0

63

2

append 모드 사용 시 집계

0

67

2

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

0

108

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