효율적인 데이터 중복 제거를 위한 Parquet 콘텐츠 정의 청크화
Parquet 콘텐츠 정의 청크화(CDC)는 이제 PyArrow와 Pandas에서 사용할 수 있으며, Hugging Face의 Xet 스토리지 레이어와 같은 콘텐츠 주소 지정 스토리지 시스템에서 Parquet 파일을 효율적으로 중복 제거할 수 있게 합니다. 변경된 데이터 청크만 업로드하거나 다운로드함으로써, CDC는 대규모 데이터셋의 데이터 전송 및 저장 비용을 크게 감소시킵니다.
Xet와 CDC를 활용한 Parquet 스토리지 최적화
Hugging Face는 4PB가 넘는 Parquet 파일을 호스팅하고 있습니다. 이 스토리지를 최적화하기 위해 Hugging Face는 데이터 청크를 중복 제거하고 전송 속도를 향상시키는 콘텐츠 정의 청크화를 사용하는 Xet 스토리지 레이어를 도입했습니다.
Xet는 포맷에 구애받지 않지만, 표준 Apache Parquet 레이아웃과 컬럼 청크 압축은 데이터에 사소한 변경이 있어도 완전히 다른 바이트 수준의 표현을 만들곤 합니다. 이는 최적이 아닌 중복 제거를 초래합니다. Parquet CDC는 직렬화나 압축이 이루어지기 전에 컬럼을 논리적 내용에 따라 데이터 페이지로 청크화하도록 보장함으로써, 유사한 데이터셋 간의 바이트 수준 차이를 최소화합니다.
구현 및 사용법
사용자는 PyArrow 또는 Pandas에서 use_content_defined_chunking=True 인자를 전달하여 Parquet CDC를 활성화할 수 있습니다.
PyArrow:
import pyarrow.parquet as pq
pq.write_table(table, "hf://datasets/{user}/{repo}/path.parquet", use_content_defined_chunking=True)
Pandas:
import pandas as pd
df.to_parquet("hf://datasets/{user}/{repo}/path.parquet", use_content_defined_chunking=True)
일반 데이터 워크플로우에서의 성능
Parquet CDC는 Xet 스토리지 레이어와 함께 사용할 때 여러 일반적인 데이터 엔지니어링 시나리오에서 상당한 중복 제거 효과를 제공합니다.
정확한 복사와 컬럼 수정
- Exact Copies: 동일한 파일을 다른 저장소에 업로드하면 시스템이 이미 존재하는 콘텐츠를 인식하므로 즉시 처리됩니다.
- Adding/Removing Columns: 새로운 컬럼과 업데이트된 푸터 메타데이터만 전송됩니다. 예를 들어, 데이터셋에 새로운 컬럼을 추가했을 때 96.6MB 파일에 대해 새 데이터가 575kB만 업로드되었습니다.
- Changing Column Types: 컬럼을 캐스팅(예:
int64에서int32로)하면 수정된 컬럼과 업데이트된 메타데이터만 업로드하면 됩니다.
행 수준 작업
- Appending Rows: 테이블에 새로운 행을 추가하면 원본 행은 스토리지 레이어에서 변경되지 않으므로 새로운 데이터만 전송됩니다.
- Inserting and Deleting Rows: 일반 Parquet에서는 행을 삽입하거나 삭제하면 이후 모든 행이 이동하여 뒤따르는 모든 데이터 페이지의 바이트 수준 표현이 바뀌고 전체 재업로드가 필요합니다. Parquet CDC는 콘텐츠 기반 청크화를 통해 이러한 현상을 방지하고, 시스템이 특정 변경 사항만 식별·전송하도록 합니다. 테스트에서 데이터셋에 행을 삽입했을 때 전송량이 거의 90MB(일반)에서 6MB(CDC)로 감소했습니다.
구조 및 샤딩 변경
- Row-Group Sizes: 행 그룹 크기(예: 1M 행에서 128k 또는 256k로) 변경은 일반적으로 데이터 페이지 간 값 이동을 초래합니다. Parquet CDC는 이러한 구조적 변경에도 중복 제거 효율성을 유지합니다.
- File-Level Splits: 데이터셋을 서로 다른 샤드 수(예: 5, 10, 20)로 분할할 때, Parquet CDC와 Xet를 결합하면 샤딩 경계와 관계없이 전체 업로드 크기가 원본 데이터셋보다 거의 크지 않게 유지됩니다.
제한 사항 및 고려 사항
Parquet CDC는 데이터 페이지(컬럼 청크) 수준에서 작동하기 때문에, 그 효과는 변경 사항의 선택성에 따라 달라집니다. 필터링이나 수정이 데이터셋 전체의 대부분 데이터 페이지에 영향을 미치면, 고유 청크가 많이 식별되어 중복 제거 비율이 감소합니다.
Sources
- OriginalParquet Content-Defined Chunking