Parquet 파일 변환 예제
데이터는 여러 파일 형식이 존재하고 있으며, 그중에서도 CSV 파일은 텍스트 기반의 데이터를 저장하기 위해 널리 사용되는 형식 중 하나입니다. CSV 파일은 단순한 구조를 가지고 있어 자주 사용되고 있지만, 대용량의 데이터를 처리하거나 복잡한 데이터 구조를 다루는 경우에는 제한이 있습니다. 이러한 경우 데이터를 보다 효율적으로 저장하고 처리하기 위해 Parquet 형식을 사용할 수 있습니다. 이번 글에서는 파이썬에서 CSV 파일을 Parquet 파일로 변환하는 예제를 진행해 보겠습니다.
Parquet(파케이)란?
Parquet는 대규모 데이터 처리를 위한 열 지향 형식의 파일 포맷입니다. 대용량의 구조화된 데이터를 저장하기 위해 설계되었으며, 데이터의 압축 및 직렬화를 효율적으로 수행하여 데이터의 저장 공간을 줄이고 처리 속도를 높입니다. 하둡같은 대규모 데이터 처리 시스템에서 자주 사용됩니다.
행 기반 압축보다 열 기반 압축이 효율적인 이유는 동일한 데이터 타입을 가진 컬럼을 연속적으로 저장하기 때문입니다.
예제
Colab + Spark 예제에서 사용했던 일자/카테고리 별 키워드 순위 데이터를 사용하여 Parquet 변환 예제를 진행해 보겠습니다. 데이터 샘플은 아래 이미지와 같으며, 2,100,160행으로 약 115MB입니다.
1. 라이브러리 설치
필요한 라이브러리 설치
pip install pandas
pip install pyarrow
2. 라이브러리 import
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
3. 변수 값 설정
읽기, 쓰기 작업 간에 필요한 변수 및 옵션 값 설정
chunk를 사용하는 이유는 대용량 데이터를 한 번에 불러올 경우 메모리 초과로 에러가 발생할 수 있으며, 이를 방지하기 위해 데이터를 나눠서 읽습니다.
# 파일명(읽기, 쓰기)
csv_file = 'keyword.txt'
parquet_file = 'keyword.parquet'
# csv 읽을 때 옵션 값(chunk, header, dtype)
chunk_size = 100000
header = ['base_date', 'category_code', 'rank', 'keyword', 'link_id']
dtype = {
'base_date':'str',
'category_code':'str',
'rank':'int16',
'keyword':'str',
'link_id':'str',
}
# parquet 스키마
parquet_schema = pa.schema([
('base_date', pa.string()),
('category_code', pa.string()),
('rank', pa.int16()),
('keyword', pa.string()),
('link_id', pa.string())
])
4. csv 읽기
# csv_stream - chunk_size만큼 나눠서 읽기
csv_stream = pd.read_csv(csv_file, chunksize=chunk_size, names=header, dtype=dtype, low_memory=False)
5. parquet 파일 생성
parquet 파일 생성 시 압축 방법으로 snappy, gzip 등이 있으며, 일반적으로 사용하는 snappy를 이용하여 압축했습니다.(snappy - 적당한 압축률에 빠른 압축/해제 속도)
# csv_stream을 반복문으로 가져오며, 각 chunk에 대한 작업
for i, chunk in enumerate(csv_stream):
print(f"chunk : {i}")
# 첫 번째 조각인 경우 parquet_writer 객체 생성
if i == 0:
parquet_writer = pq.ParquetWriter(parquet_file, parquet_schema, compression='snappy')
table = pa.Table.from_pandas(chunk, schema=parquet_schema)
parquet_writer.write_table(table)
parquet_writer.close()
6. parquet 파일 확인
생성된 parquet 파일을 출력하여 확인
import pyarrow.parquet as pq
# Parquet 파일 열기
table = pq.read_table('keyword.parquet')
# 테이블 데이터를 pandas 데이터프레임으로 변환
df = table.to_pandas()
# 데이터프레임 출력
print(df.head(10))
7. 파일 크기 확인
약 115MB → 약 15MB로 압축된 것을 확인할 수 있습니다.
함께 보면 좋은 글
추가 예정
'Language > Python' 카테고리의 다른 글
[Python] Riot API - LOL 랭크 게임 데이터 수집 (1) | 2023.06.21 |
---|---|
[Python] 파이썬의 제어문(if문, for문, ...) (0) | 2023.05.12 |
[Python] 파이썬 가상환경 (0) | 2023.05.11 |
[Python] 파이썬 3.10 새로운 기능 (0) | 2023.05.10 |
[Python] 딕셔너리(Dictionary) 자료형 (0) | 2023.05.08 |
댓글