본문 바로가기

Programming

[Library] Dask? Spark?

728x90
반응형

캐글을 진행하며 중용량(?) 데이터(약 16GB ~ 40GB)를 처리하게 되었다. 파일 포맷과 데이터 타입, 값 변환 등의 처리만으로는 부족하다 싶어 대용량 데이터 처리를 위한 도구를 모색하게 되었다. 

대용량 분석을 위해 spark를 많이 쓰고 pyspark를 제공하지만 로컬 분석 환경에서 사용하기에는 환경 구성에 시간을 들인 만큼의 효율이 나지 않을 수도 있다는 우려가 있었다. 또한 데이터 분석가의 필수 도구인 pandas와 numpy사용에 제약이 있다는 단점이 있다. 

그렇게 적절한 도구가 없나 찾아 헤매던 중 dask를 알게 되었고 이를 비교한 포스터가 있어 변역하여 정리하고자 한다.


https://medium.com/geekculture/dask-or-spark-a-comparison-for-data-scientists-d4cba8ba9ef7

 

Dask or Spark? A Comparison for Data Scientists

3 Reasons Why Dask is Better Suited for Data Science Projects (And When it is Not)

medium.com


Dask? 또는 Spark? 데이터 과학자를 위한 비교!

Introduction : 데이터 과학의 빅데이터

데이터 과학자로서 메모리의 한계를 경험하는 순간이 오는데 이 때 pandas와 numpy는 최적화를 하더라도 그다지 도움이 되지 않는다. 빅데이터 솔루션을 위해 pyspark를 사용하기 전 3가지 질문에 대한 답을 생각해보자. 

1. 왜 빅데이터를 가지고 있나? 

: 정말 이 데이터 전부가 필요한가? 샘플링이나 필터링으로 줄일 수 있는 방법은 없나?

2. 이 데이터를 어떻게 다시 줄일 수 있나?

: 정말 이 단계로 취합된 데이터가 필요한가? 더 작게 취합하거나 chunk를 사용할 수는 없나?

3. 빅 데이터를 사용해야 하는 단계는 무엇이고 어떤 도구가 이를 도와줄 수 있을까? 

: 내 작업의 bottleneck은 어디인가? / 빅 데이터로 학습, 예측을 해야 하나? / 큰 데이터로 모델 하나를 학습해야 하나? 또는 작은 데이터로 여러개의 모델을 학습해야 하나?

1,2번 질문에 대한 대답에도 여전히 메모리 문제가 있다면 Dask와 Apach Spark를 비교하는 이 포스트는 당신에게 도움이 될 것이다.

 

Dask가 무엇인가?

Dask는 파이썬 데이터 과학 생태계를 통합한 순수 파이썬 (Pure Python) 빅데이터 솔루션이다. 

Dask는 pandas와 numpy를 스케일링 할 수 있는 파이썬 모듈이고 빅데이터 툴이다. Spark처럼 병렬 실행, 데이터 프레임과 배열의 out-of-memory도 다룰 수 있다. Python API를 제공하는 spark와는 다르게 Dask는 순수하게 파이썬으로 만들어진 모듈이고 파이썬 데이터 분석 생태계의 부분이라는 것이 차이점이다. 

Spark와 많은 부분이 유사하다. 

Lazy execution : 콘솔에서 명령어 실행시에 실제로 수행되지 않는다. 그래프에 작업이 추가되고 실행 명령이 호출될 때 Dask는 그래프를 최적화해서 실행한다. 

 

Scheduler : 다양한 테크닉으로 실행 클러스터를 분산한다. 또한 scheduler 없이도 작업할 수 있다

 

Dask를 선택해야 하는 세가지 이유!

 1. pandas, numpy와의 통합

numpy, pandas는 데이터 과학에 필수적인 도구이고 dask는 이 라이브러리를 이용해 만들어졌다. 만약 pandas, numpy를 잘 사용한다면 dask는 이 API를 대부분 상속받았기 때문에 절반 정도 마이그레이션 했다고 볼 수 있다. 
또 pandas dataframe은 dask dataframe의 블록이기 때문에 pandas, dask를 함께 이용해 작업을 할 수 있도 별도 처리 없이 통합할 수 있다. 하지만 중요한 것은 dask는 pandas는 아니다. 엄밀히 개념과 사용법에 차이는 있다. 
아무튼 이런 특징으로 동일 프로젝트 내에서 매우 적은 노력으로 dask와 pandas를 함께 사용해 작업할 수 있다. 

 

2. Scikit-learn, Joblib와의 통합

dask는 scikit-learn과 거의 통합할 수 있고, 이는 spark를 뛰어넘는 큰 장점이다. 
dask는 선형 모델, 나이브 베이즈, 클러스터링, 차원축소, xgboost 등의 알고리즘을 제공하지만, 또한 scikit-learn 모델의 병렬 화도 지원한다.
마지막으로 작은 데이터셋으로 학습 후 큰 데이터셋으로 예측해야 하는 상황에서 dask는 ParallelPostFit 래퍼를 제공하여 scikit-learn 모델을 사용할 수 있다. 

 

3. 순수 파이썬 솔루션

순수하게 파이썬으로 작성되었기 때문에 ex-pythonic 의존이 없다. 이는 데이터 과학자에게는 디버깅이 매우 간편해진다는 것을 뜻한다.
spark를 위해 java, scala를 설치할 필요도 없고, 간단한 scheduler에는 local cluster를 다룰 일도 없다.

 

Dask보다 나은 Spark의 장점

dask는 데이터 과학자의 프로젝트에 적합한 반면 spark는 많은 주요 이점이 있다.

1. dask보다 훨씬 큰 크기의 데이터를 다룰 수 있다. 만약 1TB를 초과한다면 spark를 사용해야 할 것이다.

2. dask의 sql은 아직 성숙하지 못했다. 현재로써는 데이터를 sql쿼리로 조작하지 못할 것이다.

3. spark는 Apache 에코시스템의 일부라서 Hive, Iceberg 같은 다른 많은 apache 도구와 통합할 수 있다. 

 

요약

큰 전쟁을 위해서 큰 총을 준비해야 한다. - 그리고 Spark는 너무 큰 총이다.

빅데이터를 다루기 전 처음의 세 가지 질문에 대해 기억하자. 
이 글에서는 데이터 과학자의 프로젝트에는 dask가 더 적합하다는 주장에 대해 세 가지 이유를 제시했다. pandas&numpy, scikit-learn과 통합할 수 있다는 점. 그리고 순수 파이썬 솔루션이라는 점이다.
하지만 dask가 당신의 프로젝트에 최선은 아닐 수 있다. Ray, Modin, vaex, Rapids 같은 빅데이터를 다루기 위한 다른 파이썬 솔루션도 있고 각각 장점과 단점이 있다. 
또한 처리해야 하는 데이터가 테라바이트 단위라면 spark를 선택해야 할 것이다. 


GB 단위의 로컬 분석을 pandas보다 빠르게 진행하기 위해 dask를 사용해 보는 것도 나쁘지 않을 것 같다. 하지만 제품 단위로 가거나 더 큰 데이터를 사용하거나 DB 작업이 필요하다면 spark를 고려해야 할 것이다. 

현재 진행하는 캐글 프로젝트를 진행하며 dask를 적용해 봐야겠다. 

728x90
반응형

'Programming' 카테고리의 다른 글

파이썬 로그 핸들링  (0) 2022.08.01
파이썬 예외처리  (0) 2022.08.01
Black을 이용한 코드 스타일 맞추기  (0) 2022.07.14
[Library] Dask 추가 정보 및 테스트  (0) 2022.07.10
정규표현식 / 파이썬 예제 (re)  (0) 2022.06.27