강의

멘토링

로드맵

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

sgjeong1108님의 프로필 이미지
sgjeong1108

작성한 질문수

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

스파크의 Dynamic Partition Pruning(DPP) 장점 알아보기

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

해결된 질문

작성

·

15

·

수정됨

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

감사합니다!

답변 2

0

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

안녕하세요 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

안녕하세요, 인프런 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 개수

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

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

sgjeong1108님의 프로필 이미지
sgjeong1108

작성한 질문수

질문하기