Dask 소개 — 파이썬 병렬 컴퓨팅 라이브러리
Dask 소개
파이썬에서 데이터가 커지면 "더 큰 서버"를 쓸 수도 있지만, 그보다는 여러 코어·여러 머신을 쓸 수 있게 코드를 바꾸는 게 효율적일 때가 많아요. Dask는 그러한 병렬 컴퓨팅을 위한 파이썬 라이브러리예요. 두 부분으로 이뤄져 있는데, 하나는 인터랙티브 컴퓨팅에 최적화된 동적 태스크 스케줄러, 다른 하나는 병렬 배열·데이터프레임·리스트 같은 빅데이터 컬렉션이에요.
핵심 가치
- 친숙함(Familiar): 병렬화된 NumPy 배열과 Pandas DataFrame 객체 제공
- 유연함(Flexible): 커스텀 태스크 스케줄링 인터페이스로 다른 프로젝트와 통합
- 네이티브(Native): 순수 파이썬으로 PyData 스택에 접근 가능한 분산 컴퓨팅
- 빠름(Fast): 빠른 수치 알고리즘에 필요한 낮은 오버헤드·지연·최소 직렬화
- 확장(Scales up): 수천 코어 클러스터에서도 탄력적으로 실행
- 축소(Scales down): 노트북에서 단일 프로세스로 간편 실행
- 응답성(Responsive): 인터랙티브 컴퓨팅을 위해 빠른 피드백·진단 제공
친숙한 사용자 인터페이스
Dask DataFrame은 pandas를 흉내 내요.
import pandas as pd
import dask.dataframe as dd
df = pd.read_csv('2015-01-01.csv')
df = dd.read_csv('2015-*-*.csv')
df.groupby(df.user_id).value.mean()
df.groupby(df.user_id).value.mean().compute()
Dask Array는 NumPy를, Dask Bag은 반복자·Toolz·PySpark를 흉내 냅니다. Dask Delayed는 for 루프를 감싸고, concurrent.futures 인터페이스로 커스텀 태스크를 제출할 수 있어요.
from dask import delayed
L = []
for fn in filenames: # for 루프로 전개
data = delayed(load)(fn) # 함수 실행을 지연
L.append(delayed(process)(data)) # 변수 사이 연결
result = delayed(summarize)(L)
result.compute()
복잡한 알고리즘
Dask는 병렬 계산을 태스크 그래프(DAG)로 표현해요. 이 그래프는 임의 구조를 가질 수 있어서, 대부분의 데이터 엔지니어링 프레임워크가 쓰는 map/filter/groupby 패러다임으로는 다루기 어려운 복잡한 상황도 처리할 수 있어요.