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

Posted

技术标签:

【中文标题】从 pandas 转移到 dask 以利用所有本地 cpu 核心【英文标题】:move from pandas to dask to utilize all local cpu cores 【发布时间】:2017-07-27 17:11:41 【问题描述】:

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

我可以在 pandas 中使用多个 CPU 吗?到目前为止,我阅读了有关发布 GIL 的信息,但这一切似乎都相当复杂。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

会这样做。您是否期望解析日期时间列有任何加速? 您的意思是从 CSV 读取数据? c-parser(默认,并且能够处理大多数情况)确实释放了 GIL,即使只使用线程,您也应该获得解析的加速。您永远不会完全获得等于内核数量的乘数,总会有一些开销,尤其是对于较小的数据。 我会调查的。有没有办法获得普通熊猫版本的加速? 这种并行加速是 dask 的目的 :) 哦,并且能够处理大于内存的数据集。 已修复;好久不见!【参考方案2】:

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

是的。

它与 pandas 的兼容性如何?

相当兼容。不是100%。如果需要,您可以将 Pandas 和 NumPy 甚至纯 Python 的东西与 Dask 混合使用。

我可以在 pandas 中使用多个 CPU 吗?

你可以。最简单的方法是使用multiprocessing 并将数据分开——如果可以有效地做到这一点,则让每个作业独立地从磁盘读取和写入磁盘。一个更难的方法是使用mpi4py,如果您有一个由专业管理员组成的多计算机环境,这将非常有用。

【讨论】:

如果只涉及具有大量 cpu 核心的单个(本地)工作人员,您会建议什么选项? 例如,单列的日期时间解析是否可以让 dask 并行化?

以上是关于从 pandas 转移到 dask 以利用所有本地 cpu 核心的主要内容,如果未能解决你的问题,请参考以下文章

优化 Pyspark 性能以匹配 Pandas / Dask?

使用 Dask 将大于内存的数据帧缓存到本地磁盘

如何将数据读取到 dask 数据帧并删除坏行

Dask + Pandas:返回一系列条件假人

pandas读取csv相对路径_你还在用Pandas处理大型数据?我发现了一个既省时又省事的工具:Dask!...

pandas读取csv相对路径_你还在用Pandas处理大型数据?我发现了一个既省时又省事的工具:Dask!...