강의

멘토링

커뮤니티

Inflearn Community Q&A

sgjeong1108's profile image
sgjeong1108

asked

Learn Python Apache Spark from Silicon Valley Engineers

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

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

Resolved

Written on

·

69

·

Edited

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-sparkiceberg

Answer 2

0

altoformula님의 프로필 이미지
altoformula
Instructor

안녕하세요 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's profile image
sgjeong1108

asked

Ask a question