Dask教程

HelloWooo發表於2018-04-13

Dask 介紹

Dask是一款用於分析計算的靈活平行計算庫。
Dask由兩部分組成:
針對計算優化的動態任務排程。這與Airflow,Luigi,Celery或Make類似,但針對互動式計算工作負載進行了優化。
“大資料”集合, 像並行陣列,資料框和列表一樣,它們將通用介面(如NumPy,Pandas或Python迭代器)擴充套件到大於記憶體或分散式環境。 這些並行集合執行在動態任務排程器之上。

Dask 安裝

在配置好 pip 的環境下安裝,只需要命令
pip install dask
即可安裝完成Dask的核心部分。而且非常小,才 1MB

但是如果需要用到比較多的功能的話,還是建議裝完整版本
pip install dask[complete]
這裡還要注意一個坑,dask的有一些庫要求的python版本 > 2.7.8 或者 3.4——版本過低容易被坑

Dask簡單使用:

也可以參考Dask官網文件

Dask用例大致可以分為以下兩類:
  1. 大型NumPy / Pandas /使用dask.array,dask.dataframe,dask.bag列出來分析具有熟悉技術的大型資料集。這與Databases,Spark或大型陣列庫類似。
  2. 自定義任務計劃。您提交了一個相互依賴於自定義工作負載的函式圖。這與Luigi,Airflow,Celery或Makefiles類似。

    今天的大多數人都認為Dask假設它是一個像Spark這樣的框架,它圍繞著大量統一形狀資料集合的第一個用例而設計。然而,許多更高效和新穎的用例屬於第二類,使用Dask來並行化定製工作流程。

Dask計算環境可以分為以下兩類:
  1. 帶有執行緒或程式的單機並行:Dask單機排程程式利用膝上型電腦或大型工作站的全部CPU功率,並將空間限制從“適合記憶體”更改為“適合磁碟”。這個排程程式使用簡單,沒有大多數“大資料”系統的計算或概念開銷。
  2. 多節點上的分散式叢集並行:Dask分散式排程程式協調叢集中多臺機器的操作。它可以在任何地方從一臺機器擴充套件到一千臺機器,但不會超越其他機器。
    單機排程程式對更多個人有用(更多人擁有個人膝上型電腦,而不是可以訪問群集),並且可能佔當前使用Dask的80%以上。分散式機器排程程式對大型機構,研究實驗室或私人公司很有用。
Dask裡面提供了很多庫,可以從最普通的 array中入手
第一個hello world的例子:

dask.array的使用:

import dask.array as da
import numpy as np
# 1.example----- HelloWorld
x = np.arange(1000)
print x
y = da.from_array(x, chunks=(100))
print y
print y.mean()
print y.mean().compute()
第二個例子:

產生隨機數:

# 2.example
x = da.random.normal(0, 1, size=(100,100), chunks=(10, 10))
a =  x.mean().compute()
print a
bag 提供了 map, filter, fold, groupby等操作
# 3.
import dask.bag as db
b = db.from_sequence([1, 2, 3, 4, 5, 6])
print b
c = db.from_sequence([1, 2, 3, 4, 5, 6], npartitions=2)
print c