본문 바로가기
🌿 Data with AI/Data Engineering

🧾대용량데이터 읽기 속도비교(read file, pandas, pyarrow)

by 카프리썬_ 2021. 9. 2.
728x90

처음으로 10만건 정도 되는 데이터를 다루어볼 수 있는 기회가 생겼다.

대용량데이터는 처음이다보니 데이터를 읽는 것부터 오래걸렸다..

그래서 데이터를 읽기 위해 여러가지 방법을 시도해보았고, 그 결과들을 비교해보려고 한다! 


Read CSV file

file로 읽어서 df로 저장하기 

내가 가장 처음 시도한 방법이다. 별다른 생각없이 그냥 일반적으로 CSV 파일을 읽어오려고 했다. 

with open file로 읽어서 df로 저장하기 

비슷한 방법이지만 with open으로도 파일을 읽어올 수 있었다. 아무래도 line마다 읽다보니 약간 시간이 더 걸리는듯?

 

Pandas

read_csv로 읽어서 df로 저장하기 

어차피 dataframe을 사용할꺼라면 그냥 pandas의 read-csv를 사용하는게 더 나을지도? 

오 그냥 csv file read보다 실행시간이 조금더 줄어들었다!

read_csv로 읽은 df를 parquet파일로 저장하기

그런데 매번 csv 파일을 계속 read하기보다 파일로 저장해서 사용하는게 효울적일것 같은데..?

대신 파일의 크기를 줄이기 위해서 컬럼기반의 파일형식인 parquet로 저장해보려고 했다.

실제로 parquet로 저장하니까 용량이 반으로 확 줄긴 줄었다!

 

Pyarrow

pyarrow는 python에서 제공해주는 Apache Arrow

Apache Arrow는  Columnar In-Memory 포맷으로 parquet파일을 읽고 변환하는데 효과적이다. 

2021.06.26 - 🌲Parquet(파케이)란? 컬럼기반 포맷 장점/구조/파일생성 및 열기

 

pyarrow로 읽어서 df로 저장하기 

어차피 parquet 파일로 저장해서 사용할꺼라면 그냥 애초에 parquet로 읽는게 더 나을지도?

pyarrow를 사용할 경우 기본적으로 table이라는 데이터타입을 생성하게 되는데,

그걸 다시 pandas로 바꾸어서 dataframe으로 저장할 수 있다. 

오 확실히 pandas로 읽었을때보다 훨씬 빠르긴하다!

pyarrow로 읽은 df를 parquet파일로 저장하기

아무리 빠르다고 해도 마찬가지로 매번 계속 read하기보다 파일로 저장해서 사용하는게 효울적일것 같아서

컬럼기반의 파일형식인 parquet 파일로 저장해보려고 했다.

오 pandas로 읽어서 parquet로 저장하는것보다 훨씬 빠르긴하다!!

 

오 근데 신기하게 파일크기는 pandas에서 parqet파일로 변형했을떄가 더 작다...

하지만 실제로 이 파일을 읽어서 사용하는데, 그때 실행시간을 비교해보면 큰 차이가 없다.

 


결론

단순히 파일을 읽는 방법 (실행시간)

pyarrow < pandas < file with open < file open  

 

파일을 읽어서 저장하는 방법 (실행시간) 

pyarrow로 읽어서 parquet로 저장 < pandas로 읽어서 parquet로 저장 

 

내가 선택한 방법

결론적으로 "10만건 정도 되는 data파일을 pyarrow로 읽어서 parquet로 저장"하는 방식을 선택했다. 

 

왜 parquet

반응형

$(document).ready(function() { var $toc = $("#toc"); $toc.toc({content: ".tt_article_useless_p_margin", headings: "h2,h3,h4"}); });