Parquet 파일 다루기

Polars로 데이터 파이프라인 확장 및 최적화하기

Liam Brannigan

Data Scientist & Polars Contributor

파일 저장 형식

DataFrame 다이어그램

Polars로 데이터 파이프라인 확장 및 최적화하기

CSV 형식

CSV를 행 단위 저장 방식으로 나타낸 다이어그램. 각 레코드가 전체 행에 걸쳐 저장됩니다.

Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet 형식

Parquet를 열 지향 저장 방식으로 나타낸 다이어그램. 같은 열의 값이 함께 그룹화됩니다.

Polars로 데이터 파이프라인 확장 및 최적화하기

아카이브 변환

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)

)
Polars로 데이터 파이프라인 확장 및 최적화하기

아카이브 변환

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet 파일 검사

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Polars로 데이터 파이프라인 확장 및 최적화하기

CSV vs Parquet

$$

CSV
  • 4.8 GB
  • 14초

$$

Parquet
  • 0.6 GB
  • 1.4초

CSV와 Parquet 비교 그림

Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet은 행 추가에 적합하지 않습니다

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • 행 추가 시: CSV
  • 읽기 시: Parquet
Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet 행 그룹

Parquet 파일이 행 그룹으로 나뉜 다이어그램.

Polars로 데이터 파이프라인 확장 및 최적화하기

행 그룹으로 필터링

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet 행 그룹

행 그룹이 있는 Parquet 파일 다이어그램.

Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet 행 그룹

행 그룹과 통계가 있는 Parquet 파일 다이어그램.

Polars로 데이터 파이프라인 확장 및 최적화하기

병렬 전략으로 스캔

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",

    )
)
Polars로 데이터 파이프라인 확장 및 최적화하기

병렬 전략으로 스캔

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet 쓰기 제어

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,

)
  • 파일 크기 감소
  • 읽기 및 쓰기 시간 증가
Polars로 데이터 파이프라인 확장 및 최적화하기

Parquet 쓰기 제어

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • 파일 크기 감소
  • 읽기 및 쓰기 시간 증가
  • 읽을 통계 증가
Polars로 데이터 파이프라인 확장 및 최적화하기

연습해 봅시다!

Polars로 데이터 파이프라인 확장 및 최적화하기

Preparing Video For Download...