Python 用于并行处理的Modin | Dask | Data.table | Pandas与内存不足的csv文件之间的比较
Dask | Modin | Data.table的基本区别和主要用例是什么Python 用于并行处理的Modin | Dask | Data.table | Pandas与内存不足的csv文件之间的比较,python,pandas,dask,modin,Python,Pandas,Dask,Modin,Dask | Modin | Data.table的基本区别和主要用例是什么 我查看了每个库的文档,它们似乎都提供了一个类似的解决方案,用于并行/内存不足计算:dask,modin或datatable(pandas不是并行工具,也不是针对内存不足的计算) 在datatable文档(已讨论)中没有找到任何内存不足工具,因此我只关注modin和dask 简言之,modin试图成为pandasAPI的替代品,而dask的评估是惰性的。modin是一个列存储,而dask是按行划分数据帧的。dask后面的
我查看了每个库的文档,它们似乎都提供了一个类似的解决方案,用于并行/内存不足计算:
dask
,modin
或datatable
(pandas
不是并行工具,也不是针对内存不足的计算)
在datatable
文档(已讨论)中没有找到任何内存不足工具,因此我只关注modin
和dask
简言之,modin
试图成为pandas
API的替代品,而dask
的评估是惰性的。modin
是一个列存储,而dask
是按行划分数据帧的。dask
后面的分发引擎是集中式的,而modin
(称为ray
)不是。Edit:现在modin
也支持dask
作为计算引擎
dask
是第一个,拥有庞大的生态系统,看起来确实有很好的文档记录,在论坛上讨论,并在视频上演示。modin
(ray
)有一些设计选择,使其在硬件错误恢复能力和高性能串行化方面更加灵活。ray
旨在在人工智能研究中发挥最大作用,但modin
本身具有通用性。ray
还致力于支持实时强化学习的实时应用程序r
更多详细信息和。我有一项处理每日股票交易数据的任务,因此偶然发现了这篇文章。我的行长约为6000万行,列长小于10行。我在
read_csv
和groupby mean
中对所有3个库进行了测试。基于这个小测试,我选择了dask
。下面是一个示例三种方法的比较:
| 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
最初在内存中有所有数据,并且是超级fa在read_csv和groupby中都使用st。但是,考虑到它与pandas不兼容,它似乎最好使用dask
。实际上,我来自R,我非常熟悉R的data.table,所以我在python中应用它的语法没有问题。如果python中的datatable
可以无缝连接到pandas(就像在R中使用data.frame一样)那么这就是我的选择。您分配给了多少内核?可能是modin
由于是列存储而没有帮助,而dask
是按行分区的吗?您是否也将pandas本身的计算时间作为基线?也对modin结果感到惊讶已经有一段时间了,但我的记忆是,我我没有分发内核,所以我应该使用默认设置。这是一个小测试,所以我想我只是记录了墙时间,没有深入挖掘。我想最后我的选择是使用默认的pandas read_csv,尽管加载速度很慢。我想我没有选择dask,因为经过多次调整代码后,出现了错误等等第四,对于其他数据操作来说,它并没有我预期的那么快。所以我不知道这些软件包是否在改进或有任何其他建议?vaex好吗?我没有尝试过这个,但总有一天我肯定会开始另一轮搜索和测试…赛昂提供了一个具有完全分布式执行的数据帧API。对于是usecase.github.com/cylonda/cylon,免责声明,我支持cylon项目。