从 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?