inflearn logo
강의

Course

Instructor

Learn Python Apache Spark from Silicon Valley Engineers

Learning the Advantages of Spark's Dynamic Partition Pruning (DPP)

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

Resolved

78

sgjeong1108

2 asked

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

Answer 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

51

2

주피터 사용 및 도커 설치

0

98

2

broadcast Join과 boradcast + UDF 차이

0

64

2

append 모드 사용 시 집계

0

69

2

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

0

112

2

BroadCast 지원 가능 메모리 문의

0

91

2

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

0

190

2

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

0

204

3

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

1

231

2

broadcast 코드 예시 관련 질문

0

130

2

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

0

116

1

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

0

217

2

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

1

167

1

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

1

338

1

Spark Structured Streaming Gracefully shutdown 질문

1

450

2

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

1

216

1

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

1

462

2

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

1

279

1

pyspark.SparkContext 실행 오류 관련 질문

2

382

1

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

1

353

2

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

1

320

1

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

1

473

1

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

1

300

2

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

1

1168

1