틀린점이 있을 수 있습니다.
배경
ETL 작업을 진행하고 있었다.
Raw 데이터는 Parquet 로 변환하는 작업을 진행 중이고, 사용하는 파이썬 라이브러리는 Pandas 이다.
Pandas 에서는 DataFrame 을 Parquet 로 변환하는 to_parquet 함수를 제공한다.
to_parquet 는 3가지 Compression 방식을 옵션으로 제공한다.
... Parquet 는 압축이 아닌걸까?
우선 첫 번째로 헷갈렸던 내용은
“Parquet 도 압축 방식이 아닌건가?” 였다.
Parquet 에 대해서 인터넷의 글들을 읽어보면서 Parquet 가 압축방식인지 헷갈렸었다.
왜냐하면,
아래의 그림처럼 Parquet 가 CSV 보다 파일 사이즈를 많이 줄인다라는 글들이 너무 많았다.
그래서 Parquet 가 압축방식인지 헷갈렸었다.
Parquet 를 압축 방식으로만 생각하면 오해가 생길 수 있다.
Parquet 를 csv, tsv 나 json 처럼 데이터 를 표현하는 방식으로 생각해야한다.
그러나, 종종 아래의 두 이유 때문에 엄청 특수한것처럼 보기기도 하다.
- csv 나 json 같은 경우는 우리가 볼 수 있는 텍스트로 표현되지만, parquet 는 csv 나 json 만큼 보편적인 도구가 아니기도해서 parquet 를 읽는 프로그램이 없으면 parquet 파일을 읽을 수 없다.
- 읽는 것이 안되니 열었을 때 깨진것처럼 표현되거나 binary 데이터를 보는것처럼 보일 것이다.
Parquet 의 가장 큰 특징은 아래와 같다.
- int, double 처럼 자료형과 함께 데이터를 저장하고, 열 기반으로 데이터를 저장하는 방식이다.
- 위 두가지 특징과 내부적인 데이터 저장 방식으로 인해 csv 나 json 보다 압축률이 정말 좋다.
- 그리고 무엇보다 데이터를 파싱할 때 문제를 많이 방지할 수 있다. (경험에 의하면 정말 자주.. 많이 발생한다...)
- (csv 랑 json 은 특수문자로 인해 파싱 문제가 엄청 많이 발생한다…)
그럼 Parquet 는 csv 와 json 과 비교해서 데이터표현 혹은 저장방식으로 볼수 있다.
그런 to_parquet 에서 제공하는 3가지 압축방식 ‘snappy’, ‘gzip’, ‘brotli’은 무엇인가..?
‘snappy’, ‘gzip’, ‘brotli’ 은 무엇인가?
이건 보편적인 파일 압축방식이다.
보편적이란 말을 사용한 이유는 두 가지가 있는데,
- zip 이나 tar 처럼 압축방식이다.
- 어떤 파일이 들어오더라도 파일의 크기를 줄여주는 압축 방식이다.
(출저 : 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 과 같은 파일압축방식이다.
'엔지니어링' 카테고리의 다른 글
AWS CloudWatch 를 통한 서버 메트릭, 로그 관리 하기 (기초) (0) | 2022.11.23 |
---|---|
AWS 와 GCP 에서 Docker 기반 인스턴스의 네트워크 차이(Compute Engine / EC2 ) - 포트포워딩 (0) | 2022.11.08 |
같은 스키마를 가진 파일들 안에서 여러개의 Athena 테이블이 만들어질 때 (0) | 2022.05.17 |
리눅스 grep 명령어 (0) | 2022.05.04 |
리눅스 SED 명령어 (0) | 2022.05.04 |