JUST WRITE

따릉이 대여소 정보 Dashboard 구성(5) - Parquet 형식으로 Data 변환 본문

Cloud

따릉이 대여소 정보 Dashboard 구성(5) - Parquet 형식으로 Data 변환

천재보단범재 2022. 3. 2. 12:43
AWS Cloud 실습을 위해 진행한 개인 프로젝트를 정리한 글입니다.

서울 따릉이 대여소 Data를 AWS Service와 Grafana를 이용하여 Dashboard까지 구성해보았다.

따릉이 대여소 Data를 정재한 다음 CSV로 만들었다.

Parquet 형식으로 하면 성능면에서 개선이 될 수 있을 거 같아 시도해보았다.

Parquet 형식으로 Data 정제

따릉이 대여소 정보와 실시간 대여 정보를 Python Code로 정제하여 CSV 파일로 만들었다.

Python fastparquet package를 활용하여 CSV가 아닌 Parquet으로 결과물을 만들었다.

# (기존) CSV 파일 생성
impart pandas as pd

file_name = 'seoul_rentbike_info_{}.csv'.format(g_collection_date.strftime('%m_%d_%Y'))
result_df.to_csv(file_name, encoding='UTF-8', index=False)

# (변경) Parquet 파일 생성
from fastparquet import write

type_map =  {
    'stationId': 'utf8',
    'stationNum': 'int32',
    'stationName': 'utf8',
    'gu':'utf8',
    'address':'utf8',
    'stationLatitude':'utf8',
    'stationLongitude':'utf8',
    'rackTotCnt':'int32',
    'parkingBikeTotCnt':'int32',
    'shared':'int32'
}

file_name = 'seoul_rentbike_info_{}.parquet'.format(g_collection_date.strftime('%m_%d_%Y'))
write(file_name, result_df, compression='GZIP', times='int96', object_encoding=type_map)

각 Data Type에 맞게 type_map을 만들어 지정을 해주었다.

Date는 int 형식으로 처리하여 주었다.

AWS S3에는 기존대로 코드대로 boto3 Package로 업로드하였다.

Redshift에도 기존과 같이 COPY 명령어를 통해서 Data를 이관하였다.

다만 Parquet 형식으로 지원 안 되는 부분이 있어 수정을 하였다.

Redshift Table 변경

Redshift에 적재하는 Table의 Column DataType은 아래와 같이 변경하였다.

  1. int -> bigint
  2. date -> timestamp
    • CSV 파일에는 Date를 'm/d/y'형식으로 넣어서 COPY시에 Format 옵션으로 Data 칼럼에 Insert
    • Parquet으로 COPY시에 Format 옵션 지원 X -> Parquet time 형식에 맞는 timestamp로 변경
Column명 변경 전 변경 후
station_id varchar(20)  -
station_num int bigint
station_name varchar(100) -
gu varchar(20) -
address varchar(200) -
latitude varchar(20) -
longtitude varchar(20) -
rack_cnt int bigint
parking_bike_cnt int bigint
shared int bigint
collect_date date timestamp

Parquet으로 바꾸면서 Redshift COPY 명령에 지원안되는 옵션을 제외하였다.

COPY ${REDSHIFT_TABLE_NAME}
FROM '${S3_OBJECT_NAME}' 
CREDENTIALS 'aws_access_key_id=${ACCESS_KEY_ID};aws_secret_access_key=${SECRET_ACCESS_KEY}'
FORMAT AS PARQUET

Parquet vs CSV

파일 크기

CSV와 비교하여 Parquet의 파일크기가 현저히 줄어든 것을 확인할 수 있다.

아래는 AWS S3에 CSV와 Parquet 형식 모두 업로드된 따릉이 Data 산출물이다.

70.7KB에서 27.0KB로 기존 크기에 비해 38%정도로 줄어들었다.

Lambda 수행 속도

따릉이 대여소 Data를 AWS S3에 업로드하면 Trigger로 작동해 매핑된 Lambda가 수행된다.

수행된 Lambda Function을 통해 해당 Data가 COPY 명령어로 Redshift Table에 적재된다.

Lambda Function 수행시간을 CSV와 Parquet일 때를 비교해보았다.

CSV

Parquet

CSV Parquet
4578.07 ms 4845.43 ms

Parquet일때보다는 CSV일 때 267 ms 빠르게 수행된 것을 알 수 있었다.

Data Size가 작아서 큰 Data일 때도 이와 같은 결과가 나올지 궁금하다.

728x90
반응형
Comments