[Python] 데이터프레임 데이터 Parquet(파케이)로 파일 저장하고 읽기

Parquet이란?

빅데이터를 처리할 때 많은 시간과 비용이 들어가는데 Parquet을 사용하므로써 데이터를 압축시켜 빠르게 읽게 해줄 수 있는 파일 포맷이다. csv나 xlsx처럼 Parquet(파케이)도 .parquet 이라는 확장자명을 가지고 있다.

 

<참조자료>

 

🌲Parquet(파케이)란? 컬럼기반 포맷 장점/구조/파일생성 및 열기

어떻게 알게 되었나? 보통 수집한 데이터들은 정형데이터, 비정형데이터에 따라 RDB나 NoSQL로 저장했다. 그런데 데이터레이크를 만들면서 객체스토리지인 s3에 데이터를 저장해야했다. 사실 처음

pearlluck.tistory.com

 

파케이에 대해 좀 더 설명하자면, Parquet 파일로 변환 후 저장하면 열 기반 형식으로 데이터가 저장된다.

열 기반으로 저장한다는 의미는 테이블의 각 컬럼(열)을 하나의 묶음로 저장한다는 의미다.

집계에 최적화되어 있으며 데이터 압축률이 좋고 필요한 컬럼(열)만 빠르게 읽게 해준다.

(※ 참고로 행 기반의 데이터베이스는 Oracle, Mysql이 있으며 '읽고 쓰기'에 최적화되어 있는 일반적인 데이터베이스다.)

그렇다면 Parquet(파케이)는 어떨 때 써야 할까?

보통 아래 두 가지 경우의 문제가 모두 해당한다면 떠오를 듯 하다.

  1. 데이터가 너무 커서 시간과 비용이 부담되는 경우
  2. 최종데이터에서 컬럼 단위(열)로 집계 위주로 사용하는 데이터인 경우

Parquet 파일저장하기

import pandas as pd
import pyarrow.parquet as pq

# 데이터프레임을 parquet으로 저장
df_data.to_parquet('df_data.parquet', engine = 'pyarrow', index = False) # compression = ''

엔진(engine) 선택

  • 종류: pyarrow(추천), fastparquet
  • pyarrow가 fastparquet보다 압축 속도가 훨씬 빠르지만 기본적인 라이브러리 용량이 100배 차이남(트레이드오브 따져서 선택하기)

압축방식(compression) 선택

  • 종류: gzip(추천), snappy
    - snappy: 압축 속도가 빠르기 때문에 빠르게 읽고 쓰는데 좋지만 의존성 라이브러리 이슈가 종종 있음
    - gzip: 압축 속도는 snappy보다 느리지만 시스템에서 기본적으로 잘 지원해줌

Parquet 파일 데이터 프레임으로 읽기

parquet_data = pd.read_parquet('./df_data.parquet', engine = 'pyarrow')
parquet_data

 

 

<참조자료>

https://pearlluck.tistory.com/540

https://amazelimi.tistory.com/entry/Parquet-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90