从pandas迁移到dask以利用所有本地cpu核心

时间:2017-03-07 13:11:53

标签: python pandas cpu multicore dask

最近我偶然发现http://dask.pydata.org/en/latest/ 由于我有一些只在单核上运行的熊猫代码,我想知道如何利用我的其他CPU核心。 dask能否很好地使用所有(本地)CPU内核?如果是,它与熊猫的兼容性如何?

我可以将多个CPU与pandas一起使用吗?到目前为止,我读到了关于发布GIL的内容,但所有内容似乎相当复杂。

2 个答案:

答案 0 :(得分:3)

  

dask能否很好地使用所有(本地)CPU内核?

  

它与熊猫的兼容性如何?

非常兼容。不是100%。如果需要,你可以混合使用Pandas和NumPy甚至是纯粹的Python内容。

  

我可以将多个CPU与pandas一起使用吗?

你可以。最简单的方法是使用multiprocessing并保持数据分离 - 让每个作业独立地从磁盘读取并写入磁盘(如果可以有效地执行)。使用mpi4py是一个非常困难的方法,如果您拥有一个拥有专业管理员的多计算机环境,这将是最有用的。

答案 1 :(得分:2)

Dask在其数据帧中实现了large fraction pandas API。这些操作在整个数据帧的块上调用完全相同的pandas函数,因此您应该期望它们完全兼容。

生成的计算可以在任何可用的schedulers中运行,允许您选择是运行低开销线程还是更复杂的线程。分布式调度程序使您可以完全控制线程和进程之间的分离,具有更多功能,并且可以在以后跨群集扩展,因此即使对于简单的单机任务,它也越来越成为首选选项。

许多pandas操作会释放GIL,因此可以有效地使用线程。此外,许多pandas操作可以很容易地分解为并行块 - 但有些不能并且要么更慢(例如需要shuffle的连接),或者根本不工作(例如多索引)。找出答案的最佳方法是尝试一下!