Dask 的根本区别和主要用例是什么 |莫丁 |数据表。
我检查了每个库的文档,它们似乎都为熊猫的限制提供了"类似"的解决方案
我正在尝试决定学习并行/内存不足计算的三种工具:dask
,modin
或datatable
(pandas
不是并行工具,也不是针对内存不足计算)。
在datatable
文档中没有找到任何内存不足的工具(此处讨论),因此我只关注modin
和dask
。
简而言之,modin
试图成为pandas
API的直接替代品,而dask
则被懒惰地评估。modin
是列存储,而dask
是按行对数据框进行分区。dask
背后的分配引擎是集中的,而modin
的分发引擎(称为ray
)则不是。编辑:现在modin
也支持dask
作为计算引擎。
dask
是第一个,拥有庞大的生态系统,看起来非常有据可查,在论坛上讨论并在视频中演示。modin
(ray
)有一些设计选择,使其在硬件错误和高性能序列化方面的弹性方面更加灵活。ray
旨在对人工智能研究最有用,但modin
本身是普遍用途的。ray
还针对实时应用程序,以更好地支持实时强化学习。
更多细节在这里和这里。
我有一个处理每日股票交易数据的任务,并遇到了这篇文章。我的行长度约为 6000 万,列的长度低于 10。我在read_csv
和groupby mean
中测试了所有 3 个库。基于这个小测试,我的选择是dask
.以下是 3 的比较:
| library | `read_csv` time | `groupby` time |
|--------------|-----------------|----------------|
| modin | 175s | 150s |
| dask | 0s (lazy load) | 27s |
| dask persist | 26s | 1s |
| datatable | 8s | 6s |
目前看来modin
不如dask
有效,至少对于我的数据而言。dask persist
告诉dask
您的数据可以放入内存中,因此 dask 需要一些时间来放入所有内容而不是延迟加载。datatable
最初将所有数据都保存在内存中,并且在 read_csv 和 GroupBy 中都非常快。但是,鉴于它与熊猫不兼容,似乎最好使用dask
.实际上我来自R,我非常熟悉R的data.table,所以我在python中应用它的语法没有问题。如果python中的datatable
可以无缝连接到pandas(就像R中的data.frame一样),那么这将是我的选择。