목차
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
https://devtimes.com/python-dask/
'Code > 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 |