parquet(파케이)
- parquet: 하둡에서 컬럼 방식으로 저장하는 포멧
컬럼 방식: 메모리 내에 데이터 저장시, 열을 순차 블록에 저장하는 방식
컬럼 별로 인코딩을 사용할 수 있으며, 비슷한 값끼리 모아 저장하므로 압축률이 높아 파일 크기가 작다
컬럼 단위로 I/O가 발생하므로 aggregation 쿼리 수행 시 처리 속도가 빠르다
python을 사용해 열 경우 pyarrow라는 엔진을 사용해 읽고, snappy라는 엔진을 사용해 압축한다
※ 주의! pandas dataframe으로 읽어온 데이터 프레임은 서로 다른 형식의 데이터가 한 컬럼안에 존재하는 경우 object라는 타입으로 저장하는데, object 타입으로 저장된 컬럼이 존재하는 pandas dataframe을 to_parquet 명령어로 parquet 형식으로 저장할 경우, 포멧이 달라 저장할 수 없다는 에러가 뜬다
- 행 기반 데이터 포멧과 비교해 aggregation이 빠른 이유?
컴퓨터는 데이터를 메모리 블록 단위로 읽어온다. 따라서 특정 데이터 하나를 읽어오려고 하는데, 데이터가 A라는 메모리 블록 안에 있는 경우, A 블록 전체를 읽어온 뒤 -> 데이터를 가져오는 방식으로 작동한다.
A~D 열로 구성된 테이블에서 C열 내 포함된 데이터 전체를 더하는 명령어를 실행하려고 할 때,
블록이 행 단위로 구성되어있는 상태에는 다음과 같은 처리 과정을 거친다.
- A~D 열 전체 값을 한 행, 한 행 다 읽어온다.
- 이중, C열의 값을 선택한다.
- 더하기 쿼리를 수행한다.
불필요한 열의 데이터까지 다 읽어오는 1의 과정에서 메모리 비효율이 발생하며 처리 속도가 저하된다.
따라서 특정 열을 골라 수행하는 aggregation 명령 수행시 메모리 효율(속도)에서 이점을 보고싶다면, 컬럼 방식의 포멧을 선택하는 게 좋다.
자연어 로데이터를 핸들링하다가 로컬에 데이터를 얹고 필요한 열만 가져오는 데에만 한 세월 걸려서 찾아다니다 알게된 정보들. 분석업무 하려면 결국 CS 관련 지식도 필수적으로 알아야만 한다는 사실을 배웠다.
※ 참고 자료
https://www.timestored.com/time-series-data/what-is-a-column-oriented-database
https://haeunyah.tistory.com/69
'공부 > Python' 카테고리의 다른 글
주피터 노트북 메모리 표시 모듈 추가 (0) | 2023.07.31 |
---|---|
polars - pandas 보다 8배 빠른 라이브러리가 있다? (0) | 2023.03.10 |
Iterable / Iterator (0) | 2021.11.18 |