Modin 使用总结

通过 Modin 加速 Pandas

Posted by Paradise on April 12, 2023

Modin 是一个 Python 第三方库,用于加速 Pandas 的 API 执行速度。原始的 Pandas 是单线程执行的,而 Modin 则重新打包了 Pandas 里面的 API,使其同时在多个内核中运行,提高硬件性能的利用率。

使用方法很简单,安装 Modin 后,将导入 pandas 的语句由 import pandas as pd 改为 from modin import pandas as pd 即可。这时候使用的便是由 Modin 包装后的 API。但是它并没有覆盖全部的 API,遇到库中不包含的 API,它会自动切换为原始的 Pandas 执行。也就是说,使用上与原始的 Pandas 是完全一致的。

STEP-1

首先安装:pip install modin,初次使用时会报错如下:

需要用到分布式引擎 Ray 或者 Dask,但是安装的时候它没有作为依赖项一起安装,需要单独安装:

pip install modin[dask]

STEP-2

接下来随便找个 csv 文件来测试一下数据读取速度:

可以看到没有变快,反而变慢了。因为分布式计算主要是加快处理内存占用型的任务,所以上图中的文件太小时没有体现出它的优势。

STEP-3

接下来整个大一点的文件试一下:

可以看到 IO 速度加快了几秒,但是没有文档中说的有明显的改进。这里原因应该是测试用的电脑硬件的问题(8G+4核+机械硬盘的一台老机器)。又或者是文件还不够大,但是测试时没有很大的数据集,而且再大内存要受不了了。但是好歹它还是快了一点,有空再研究一下正确的打开方式~

STEP-4

测试完在终端退出 Python 的时候出现了两个 ERROR:tornado.iostream.StreamClosedErrorasyncio.base_futures.InvalidStateError,大意是读写流关闭的时候出现问题,估计不是上一步中影响速度的罪魁祸首。也可能是分布式引擎的兼容性问题,下次可以用 Ray 试一下。并且退出终端后,当前路径下会出现一个名为 dask-worker-space 的文件夹,里面有四个后缀名为 dirlock 的 worker 文件,是 Dask 引擎留下的临时文件。


参考:Medium

待续