대용량 파일 관리 - parquet, downcast
by Holly Yoon- storage, memory 사이즈를 줄여야하는 이유
- “데이터를 저장하는 것” 자체가 “비용”이기 때문에
- 데이터가 누적이 될수록 파일 사이즈는 증가하기 때문에
- 주고 받기 편하게 하기 위해서
- 시간, 메모리 사용량 , 비용 등등 자원 절약을 위해
- 기업에서는 Log를 쌓을 때 데이터 엔지니어는 시간 단위로 파일을 저장할 것인지 , 어떤 기준, 어떤 도구로 데이터를 저장할 것인지를 고민하게 된다.
- Parquet을 쓰자
- csv는 행 단위로 저장하지만, parquet은 컬럼단위로 저장을 한다.
- 동일한 데이터 타입을 할 때, 압축&저장에 유리하다.
- Parquet로 저장하고, 사이즈 비교해보기
file_path_parquet = 'df.parquet.gzip'
file_path_csv = 'df.csv'
df2.to_parquet(file_path_parquet, compression='gzip')
df2.to_csv(file_path_csv, index=False)
psize=os.stat(file_path_parquet).st_size
csize=os.stat(file_path_csv).st_size
format(psize, ","),format(csize, ",")
- ETL vs ELT
- 데이터 프로덕션 시스템에서 추출 → 우리가 원하는 형식으로 변환 → 데이터 웨어하우스에 적재
- ETL은 추출과 변환이 자동화될 수 없고, 변환이라는게 회사마다 다름
- 그래서 등장한, 추출해서 일단 적재하고 변환하는 ELT
- Parquet로 저장하는 함수 만들기
def compare_csv_parquet(df):
"""
데이터프레임을 csv 와 parquet형식으로 저장하하고 각 파일 사이즈를 dict 형태로 반환
"""
file_path_parquet = 'df.parquet.gzip'
file_path_csv = 'df.csv'
df.to_parquet(file_path_parquet, compression='gzip')
df.to_csv(file_path_csv, index=False)
return({'parquet': file_size(file_path_parquet), 'csv':file_size(file_path_csv)})
compare_csv_parquet(df)
- Parquet의 특징
- 무료 오픈 소스 파일 형식
- 언어를 가리지 않음
- 컬럼 기반 형식
- 데이터 압축과 해제의 용이성
- 모든 종류의 빅데이터를 저장하는데 적합함
- 메모리를 절약해서 사용하는 방법
- 사용하지 않는 프로그램 종료
- 컴퓨터 재부팅
- 프로그램에서 과도한 메모리 사용 기능을 사용안함으로 변경하기
- 스키마 : 데이터 베이스에서 자료의 구조, 자료의 표현 방법, 자료간의 관계를 형식 언어로 정의한 구조
- downcast
- column의 min, max를 확인하고 용량을 줄여주자.
for col in df.columns: dtypes_name = df[col].dtypes.name if dtypes_name.startswith('float'): df[col]=pd.to_numeric(df[col], downcast='float') elif dtypes_name.startswith('int'): if df[col].min()<0: df[col]=pd.to_numeric(df[col], downcast='integer') else: df[col]=pd.to_numeric(df[col], downcast='unsigned') elif dtypes_name.startswith('object'): df[col] = df[col].astype('category')
- 파일사이즈를 효율적으로 관리하는 방법은 parquet
- 메모리를 효율적으로 관리하는 방법은 downcast
- 너무 큰 파일은 이렇게 쪼개서 불러올 수 있다.
import pandas as pd
df=pd.read_csv('.csv', dtype={'약품':'category'}, nrows=1000)
df.shape
'TIL' 카테고리의 다른 글
github 시작하기 (0) | 2023.03.02 |
---|---|
비즈니스 분석 (1) #ARPU #ARPPU (0) | 2023.03.01 |
[TIL] 내용수집 함수만들기 (pandas) (0) | 2023.01.19 |
[TIL] 네이버 종목토론실 스크래핑 (0) | 2023.01.12 |
[TIL] 스크랩핑 with Pandas (0) | 2023.01.12 |
블로그의 정보
Study Log by Holly
Holly Yoon