首页 > 解决方案 > 为什么我使用 modin.pandas 比使用 Pandas 需要更长的时间 [ray]

问题描述

我只是一个喜欢用 Python 处理数据的 Python 新手。

当我能够使用 Python 的代表性数据工具 Pandas 时,它似乎能够非常快速地在 Excel 上工作。

但是,我有点失望地看到检索 470,000 行的数据(.xlsx)需要超过 1 到 2 分钟,结果我发现使用 modin 和 ray(或 dask)可以更快地运行。

在学习了如何简单地使用它之后,我将它与仅使用 Pandas 进行了比较。(这次是100M行数据,大约5GB)

import ray
ray.init()
import modin.pandas as md

%%time
TB = md.read_csv('train.csv')
TB

但是写 Pandas 只用了 1 分 3 秒,而写 modin [ray] 却用了 1 分 9 秒。我很失望地看到它需要更长的时间,而不仅仅是一个小的差异。

我怎样才能比 pandas 更快地使用 modin?groupby 或 merge 之类的复杂操作?单纯读取数据有没有区别?

别人用modin读取数据比较快,是不是我电脑设置有问题?我想知道为什么。

在此处输入图像描述

记下提示安装的方法,以备不时之需。

!pip install modin[ray]
!pip install ray[default]

标签: pythonpandasraymodin

解决方案


首先,要进行公平评估,您始终需要使用 %%timeit 魔术命令,它可以为您提供多次运行的平均值。

Modin 通常在以下情况下效果最佳:

  1. 非常大的文件
  2. 大量内核

在你的情况下,我相信这种不起眼的性能主要是由于 Ray/Dask 完成的多处理管理,例如工作人员调度和所有进入并行化的设置。当您满足上述 2 个标准中的至少一个(特别是第一个,给定任何当前处理器)时,资源管理和从 Modin 获得的加速之间的权衡对您有利,但 5GB 文件也不是 6核心足够大,可以对您有利。并行化成本高昂,任务必须值得。

如果是一次性的,1-2分钟对于这类事情来说根本不是不合理的时间。如果它是您要连续读写的文件,我建议将其写入 HDF5 或 pickle 格式,在这种情况下,您的读/写性能将比仅使用 Modin 提高得多。

或者,Vaex是读取任何 df 的最快选择。不过,我个人认为它仍然非常不完整,有时与除了简单的数值数据操作之外的承诺不符,例如当您的数据中有大字符串时。


推荐阅读