본문 바로가기
엔지니어링

DataFrame을 압축하는 형태({‘snappy’, ‘gzip’, ‘brotli’ ) 알아보기 - Parquet 와는 어떻게 다를까?

by 당나귀🐴 2022. 6. 6.

틀린점이 있을 수 있습니다.

 

배경

ETL 작업을 진행하고 있었다.
Raw 데이터는 Parquet 로 변환하는 작업을 진행 중이고, 사용하는 파이썬 라이브러리는 Pandas 이다.
Pandas 에서는 DataFrame 을 Parquet 로 변환하는 to_parquet 함수를 제공한다.
to_parquet 는 3가지 Compression 방식을 옵션으로 제공한다.

... Parquet 는 압축이 아닌걸까?

dataframe to_parquet 함수

우선 첫 번째로 헷갈렸던 내용은

 

“Parquet 도 압축 방식이 아닌건가?” 였다.


Parquet 에 대해서 인터넷의 글들을 읽어보면서 Parquet 가 압축방식인지 헷갈렸었다.

 

왜냐하면,

아래의 그림처럼 Parquet 가 CSV 보다 파일 사이즈를 많이 줄인다라는 글들이 너무 많았다.

그래서 Parquet 가 압축방식인지 헷갈렸었다.

 

동일한 데이터에 대해 csv 와 parquet 사이즈 비교

Parquet 를 압축 방식으로만 생각하면 오해가 생길 수 있다.

 

Parquet 를 csv, tsv 나 json 처럼 데이터 를 표현하는 방식으로 생각해야한다.

그러나, 종종 아래의 두 이유 때문에 엄청 특수한것처럼 보기기도 하다.

  • csv 나 json 같은 경우는 우리가 볼 수 있는 텍스트로 표현되지만, parquet 는 csv 나 json 만큼 보편적인 도구가 아니기도해서 parquet 를 읽는 프로그램이 없으면 parquet 파일을 읽을 수 없다.
  • 읽는 것이 안되니 열었을 때 깨진것처럼 표현되거나 binary 데이터를 보는것처럼 보일 것이다.

Parquet 의 가장 큰 특징은 아래와 같다.

  • int, double 처럼 자료형과 함께 데이터를 저장하고, 열 기반으로 데이터를 저장하는 방식이다.

https://docs.informatica.com/data-integration/powercenter/10-2/developer-tool-guide/data-type-reference/complex-file-and-transformation-data-types/parquet-and-transformation-data-types.html

  • 위 두가지 특징과 내부적인 데이터 저장 방식으로 인해 csv 나 json 보다 압축률이 정말 좋다.
  • 그리고 무엇보다 데이터를 파싱할 때 문제를 많이 방지할 수 있다. (경험에 의하면 정말 자주.. 많이 발생한다...)
  • (csv 랑 json 은 특수문자로 인해 파싱 문제가 엄청 많이 발생한다…)

그럼 Parquet 는 csv 와 json 과 비교해서 데이터표현 혹은 저장방식으로 볼수 있다.

그런 to_parquet 에서 제공하는 3가지 압축방식 ‘snappy’, ‘gzip’, ‘brotli’은 무엇인가..?

 

‘snappy’, ‘gzip’, ‘brotli’ 은 무엇인가?


이건 보편적인 파일 압축방식이다.

보편적이란 말을 사용한 이유는 두 가지가 있는데,

  1. zip 이나 tar 처럼 압축방식이다.
  2. 어떤 파일이 들어오더라도 파일의 크기를 줄여주는 압축 방식이다.

(출저 : https://data-engineer-tech.tistory.com/35)

 

일반적으로 어떤 파일이 들어오더라도 파일의 크기를 줄여주는 방식이기 떄문에 보편적인 파일 압축방식이라고 소개했다. 자세하게 어떤 방식으로 압축되는지는 잘 모르지만 큰 특징만 보자면 

 

snappy

  • 2011 년 구글에서 개발한 압축방식이다
  • 목적 자체가 적당한 압축률, 적당한 스피드를 목적으로 한다.
  • 다른 압축방식에 비해 CPU 를 적게사용한다.

gzip

  • 1992년에 처음 소개되었다.
  • 무손실 데이터 압축 알고리즘(DEFLATE)를 사용한다.
  • SNAPPY 보다 더 많은 리소스를 사용하지만 더 압축한다.
  • 압축이 크기 떄문에 자주 사용하지 않는 콜드 데이터에 적합하다.

brotli

  • 2013년 구글에서 발표한 압축방식이다.
  • 텍스트 압축방식에 적합하기 때문에 주로 웹페이지 압축에 많이 사용된다.

이렇게 snappy, gzip, brotli 에 대해서 간단하게 알아보았다.

이제 헷갈리던 내용들이 정리되었다.

  • parquet 방식은 압축방식이라기 보다는 데이터 표현방식이다. csv 혹은 json 과 비교되여야하며, 표현방식이지만 압축이 많이되는 표현방식이기 때문에 압축에 대한 이야기가 많이 나온다.
  • snappy, gzip, brotli 는 zip, tar 과 같은 파일압축방식이다.