目录
一、概述
Dask是一个灵活的Python并行计算库。
Dask由两部分组成:
-
为计算优化的动态任务调度:和Airflow,Luigi,Celery,Make很相似,但是专门为交互式的工作负载进行了优化。
-
大数据集合:像并行数组、数据帧和列表,将NumPy、Pandas或Python迭代器等常见接口扩展到大于内存或分布式环境。这些并行集合在动态任务调度器之上运行。
Dask强调了以下特质:
-
通用:提供并行的Numpy array和Pandas DataFrame objects。
-
灵活:为更多的自定义工作负载和与其他项目的整合提供了一个任务调度接口。
-
原生:在纯Python中实现分布式计算,可以访问PyData栈。
-
快速:以低开销、低延迟和快速数字算法所需的最小序列化进行操作。
-
大规模:可以在拥有1000个内核的集群上弹性运行
-
小规模:只需要一个进程就能在笔记本电脑上设置和运行,非常简单。
-
响应性:设计时考虑到交互计算,为用户提供了快速的反馈和诊断。
二、编程模型
Dask的编程模型可以分为两大类:high level的数据集集合,和low level的接口。
High level Collection提供了3种实现:
-
Array:Dask Array使用阻塞式算法实现了NumPy ndarray接口的一个子集,将大数组切割成许多小数组。这让我们可以使用所有的内核对大于内存的数组进行计算。我们使用Dask图来协调这些分块算法。
-
Bag:Dask Bag实现了对通用Python对象集合的map、filter、fold和groupby等操作。它通过使用Python迭代器以较小的内存占用来完成这些操作。它类似于PyToolz的并行版本或PySpark RDD的Pythonic版本。
-
DataFrame:Dask DataFrame是由许多较小的Pandas DataFrame组成的大型并行DataFrame,沿着索引分割。这些Pandas DataFrame可以住在磁盘上,以便在一台机器上进行大于内存的计算,或者在集群中的许多不同机器上进行计算。一个Dask DataFrame操作会触发对组成的Pandas DataFrame的许多操作。
除此之外,Dask还允许自定义Collection,只需实现Dask为Collection所定义的接口即可。
注意,前面我们说到,大数据集合运行在动态任务调度器之上,但当前Dask默认提供的三种Collection虽然运行在动态任务调度器之上,但在调度时也对任务图做了一些封装和限制,使之更偏向于批量同步处理。其原因在于,这些默认提供的Collection的目的是为了解决分布式的大数据计算,而数据计算的特质,例如同构任务、阶段拆分等特性不需要非常灵活的动态任务调度,更偏向于一个BSP模型。但自定义的high level Collection可以打破这一约束,直接使用最底层的动态任务调度。
除了High level Collection之外,Dask也提供了low level interfa

最低0.47元/天 解锁文章
1367

被折叠的 条评论
为什么被折叠?



