목차
1. Dask란?
Dask는 Python 라이브러리 중 하나로, 라이브러리 기능 면에서는 Apache Spark와 비슷하지만 numpy, pandas와 긴밀하게 연결되어있어서 Python 사용자들이 spark보다 빠르고 쉽게 활용한다.
2. dask가 빠른 이유
dask는 가상 데이터프레임을 쓰기 때문에 pandas 데이터프레임과 비슷한 기능을 제공하지만 실제로 모든 데이터가 메모리 상에 로드되어있는 것이 아니라 하나 이상의 파일 또는 데이터베이스에 존재한다. 그렇기 때문에 메모리 크기와 관계 없이 엄청나게 큰 csv 파일을 하나의 가상 데이터 프레임에 로드할 수 있다.
또한 dask는 대량의 데이터 분석 작업을 돕기 위해 작업 스케쥴러를 제공한다. 하나의 작업을 여러개의 쓰레드, 프로세스, 노드 등이 나누어 분담한다. 병렬처리를 진행하기 때문에 dask로 파일을 읽어들이는데 더 빠르다고 할 수 있다.
3. Pandas, dask 비교
약 1.1G의 log 데이터를 이용하여 데이터를 불어왔을 때 시간이 얼마나 걸리는지 속도를 비교해보도록 하겠다.
3.1 pandas data read
import pandas as pd
st_time = time.time()
pd_df = pd.read_csv(file_path, sep = ';',
low_memory=False,
encoding = 'ISO-8859-1',
dtype = {
'CustomerID' : str,
'AgeCategory' : str,
'Gender' : str,
'SessionID' : str,
'IPID' : str,
'tip': 'object',
'tip_EN': 'object',
'xps_info': 'object',
'REF_URL_category': 'object',
'page_action_detail': 'object',
'page_action_detail_EN': 'object'
}
)
print(f"time : {time.time() - st_time}")
약 34.5초가 걸렸다.
3.2 dask data read
import dask.dataframe as dd
st_time = time.time()
dask_df = dd.read_csv(file_path, sep = ';',
low_memory=False,
encoding = 'ISO-8859-1',
dtype = {
'CustomerID' : str,
'AgeCategory' : str,
'Gender' : str,
'SessionID' : str,
'IPID' : str,
'tip': 'object',
'tip_EN': 'object',
'xps_info': 'object',
'REF_URL_category': 'object',
'page_action_detail': 'object',
'page_action_detail_EN': 'object'
}
)
print(f"time : {time.time() - st_time}")
약 0.01초 1초도 안걸리는 시간으로 데이터를 읽어들였다.
3. dask 장단점
dask를 사용해본 결과, pandas랑 비슷한 함수를 사용해서 데이터를 핸들링할 수 있다는 점에서 함수를 따로 익히지 않아도 되 편한 점이 있다.
그러나 그런 핸들링 연산 결과를 이용하여 또다른 데이터 프레임을 만들거나, pandas dataframe 의 결과로 출력하기 위해서는 .compute 함수를 사용하면 되는데, 그 함수를 사용할 경우, 일반 pandas dataframe과 같이 시간이 오래걸린다.
개인적으로, dask는 데이터를 읽어와서 간단한 데이터프레임의 정보를 보는 용으로는 좋은데, 깊은 함수를 생성하거나 처리하는데에는 좀 불편한 감이 있다고 생각한다. (아직 내가 패키지를 잘 몰라서 그런걸지도...)
https://pearlluck.tistory.com/676
🧾대용량데이터 읽기 속도비교(read file, pandas, pyarrow)
처음으로 10만건 정도 되는 데이터를 다루어볼 수 있는 기회가 생겼다. 대용량데이터는 처음이다보니 데이터를 읽는 것부터 오래걸렸다.. 그래서 데이터를 읽기 위해 여러가지 방법을 시도해보
pearlluck.tistory.com
https://devtimes.com/python-dask/
Python 병렬 처리를 위한 Dask
큰 데이터를 처리하기 위해서는 병렬처리가 효율적인데, 그래서 Apache Spark의 pyspark를 많이들 사용한다. 속도는 매우 빠르지만 Pandas에 익숙한 사람들은 불편한 점이 있다. 이를 해소시켜 줄만한
devtimes.com
pandas 대용량 csv 파일 읽기 - dask
포스팅 개요 pandas에서 4GB csv 파일을 읽었을 때 노트북이 다운되거나 메모리가 부족하다는 에러 메세지가 나왔다. 검색해 본 결과, Apache의 Pyarrow, Dask, pandas의 chunksize를 이용하는 방법이 나와있었
94ung.tistory.com
'Programming > Python' 카테고리의 다른 글
[Python] inspect 모듈의 getsource() 함수 (0) | 2022.06.12 |
---|---|
[Python/Oracle] cx_Oracle timeout 설정하기 (0) | 2022.04.10 |
[Python] HTTP web server log dataframe으로 불러오기 (with pandas) (0) | 2022.02.13 |
[Python] 주피터 노트북 테마 변경하기 (3) | 2021.05.17 |
[Python]Pytorch - RuntimeError:Error(s) in loading state_dict ... : Missing key(s) in state_dict: ... Unexpected key(s) in state_dict:... GPU 병렬 사용 문제 (0) | 2021.04.30 |