프로그래밍 공부/보면 도움이 될걸?!

Parquet 파일 Spark, Pandas에서 읽는 법

조녁 2021. 5. 20. 20:29
반응형

 

 

 

 

안녕하세요~!

27년차 진로탐색꾼 조녁입니다!

 

오늘은 대용량 데이터를 처리할때 쓰는 컬럼 기반 저장 포맷 Parquet(파케이)에 대해 공부했습니다.

 

 

1. Parquet(파케이)에 대해서

 

Parquet(파케이)는 나무조각을 붙여넣은 마룻바닥이라는 뜻을 가지고 있습니다. 아래 사진처럼 데이터를 차곡차곡 정리해서 저장한다는 의미를 지닌게 아닐까 합니다.

 

Parquet(파케이)

 

 우리가 보통 빅데이터를 처리할 때, 이를 위해 많은 시간과 비용이 들어갑니다. 이러한 리소스를 줄이기 위해 데이터를 압축하는데, 그 방법 중 하나가 컬럼기반 포맷입니다. 컬럼 기반 포맷은 같은 종류(열)의 데이터가 모여있으므로 압축률이 더 높고, 일부 칼럼만 선택해서 읽으므로 처리량을 줄일 수 있습니다.

 

 

Parquet(파케이)는 컬럼 기반 포맷의 업계 표준에 가깝습니다.

Parquet은 Apache Spark 뿐 아니라 많은 하둡 생태계의 프로젝트에서 잘 지원되는 것을 볼 수 있습니다.

 

Spark에서는 아래와 같은 간편한 코드로 손쉽게 parquet 파일을 읽고 쓸 수 있습니다.

 

val data = spark.read.parquet("PATH")

data.write.parquet("PATH")

 

데이터 분석을 하기 전 원본파일(gzipped text json 등)을 읽어서 parquet 로 저장해두고 , 원본은 S3 -> S3 glacier 이동시킨 후 parquet 에서 데이터를 읽어서 처리하는 것만으로도 저장용량 및 I/O 면에서 이득을 볼 수 있습니다.

(하지만 테스트해보니 1/3만큼의 효과는 안나왔다고합니다.)

 

 

2. Pandas로 Parquet 파일 읽기 

 

제가 읽으려는 파일은 Snappy 방식으로 압축되어있어 snappy.parquet 확장자로 되어있었는데,

데이터를 읽는 방법은 어떤 압축방식(Gzip/Snappy/Uncompressed)을 사용하든 동일합니다!

 

압축 방식을 알아서 유추해서 풀기 떄문에 별도의 옵션은 주지 않아도 됩니다.

df = pd.read_parquet('sample.parquet')

 

만약 여기서 특정 칼럼만 읽으려고 한다면 columns 인자를 전달하면된다.

df =pd.read_parquet('sample.parquet', columns=['a','b']

 

 

참고자료

VCNC블로그 - parquet에 대해

Pandas에서 parquet 사용하기

반응형