1. Parquet?
Parquet이란 하둡에서 칼럼방식으로 저장하는 저장 포맷이다.
열을 기반으로 데이터를 처리하면 행 기반으로 압축할때보다 다음과 같은 장점을 가진다.
1. 데이터 압축률이 더 높음 : 같은 속성값을 가지는 칼럼 단위로 구성하면 데이터가 더 균일하기 때문
2. 필요한 열의 데이터만 읽어서 처리 : 데이터 처리에 들어가는 지원 절약 (선택되지 않은 칼럼 I/O 발생하지 않기 때문)
3. 칼럼에 동일한 데이터 타입이 저장되기 때문에, 칼럼별로 적합한 인코딩 사용 가능
즉, parquet 형식을 사용하면 시간과 메모리를 절약할 수 있다.
출처: https://butter-shower.tistory.com/245
2. Parquet 실습
CSV 파일을 읽어 데이터 전처리를 수행한 후, 특정 키워드를 포함한 행을 필터링하고, 그 행들의 'cnt' 열 값의 합계를 계산한 뒤, 데이터를 Parquet 형식으로 저장하는 작업
1. csv 파일 데이터 불러오기
import pandas as pd
df = pd.read_csv('~/data/csv/20240717/csv.csv', names=['dt', 'cmd', 'cnt'])
df
2. str.replace()
history log데이터를 csv 파일로 변환할 때, 필드를 구별하기 위해 ^로 둘러쌓아뒀다. 이를 공백으로 치환하여 보기 편하게 없애준다.
df['dt']=df['dt'].str.replace('^', '')
df['cmd']=df['cmd'].str.replace('^', '')
df['cnt']=df['cnt'].str.replace('^', '')
df
3. 데이터 타입 변환, 필터링, 연산
df['cnt']=df['cnt'].astype(int) #cnt열의 데이터 타입을 정수형으로 변환
fdf = df[df['cmd'].str.contains('<키워드>')] #cmd열에서 특정 <키워드>를 포함한 행을 필터링하여 'fdf'에 저장
cnt=fdf['cnt'].sum() #'fdf' 의 'cnt' 열 값의 합계 계산
print(cnt)
df.to_parquet("~/tmp/history.parquet") #'df'를 parquet 형식으로 저장
3. 실습코드 변형
1. 검색하고 싶은 키워드를 입력받아 출력해주는 코드
더보기
import pandas as pd
import sys
def cnt():
df = pd.read_parquet("~/tmp/history.parquet")
keyword=sys.argv[1]
fdf = df[df['cmd'].str.contains(keyword)]
cnt = fdf['cnt'].sum()
print(cnt)
2. 특정 날짜에 가장많이 쓰인 10가지 명령어 출력해주는 코드
더보기
import pandas as pd
df = pd.read_parquet('~/data/parquet')
fdf=df[df['dt']=='<날짜>']
ddf=fdf.sort_values(by='cnt', ascending=False) #cnt을 기준으로 내림차순 정렬
sdf=ddf.drop(columns=['dt']) #의미없는 dt 컬럼 삭제
print(sdf.to_string(index=False)) #문자열로 변환하고, 결과값 출력
'Data Engineering > 실습' 카테고리의 다른 글
fastapi + movie api (2) | 2024.08.13 |
---|---|
영화진흥위원회 API (pytest 실습) (0) | 2024.08.01 |
argparse 를 이용한 히스토리 cli 고도화 (0) | 2024.07.29 |
DB 파티셔닝 (Partitioning) (0) | 2024.07.29 |
[Git] pull, branch, push, PR, merge 실습 (0) | 2024.07.11 |