python - 为什么我使用 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]
解决方案
首先,要进行公平评估,您始终需要使用 %%timeit 魔术命令,它可以为您提供多次运行的平均值。
Modin 通常在以下情况下效果最佳:
- 非常大的文件
- 大量内核
在你的情况下,我相信这种不起眼的性能主要是由于 Ray/Dask 完成的多处理管理,例如工作人员调度和所有进入并行化的设置。当您满足上述 2 个标准中的至少一个(特别是第一个,给定任何当前处理器)时,资源管理和从 Modin 获得的加速之间的权衡对您有利,但 5GB 文件也不是 6核心足够大,可以对您有利。并行化成本高昂,任务必须值得。
如果是一次性的,1-2分钟对于这类事情来说根本不是不合理的时间。如果它是您要连续读写的文件,我建议将其写入 HDF5 或 pickle 格式,在这种情况下,您的读/写性能将比仅使用 Modin 提高得多。
或者,Vaex是读取任何 df 的最快选择。不过,我个人认为它仍然非常不完整,有时与除了简单的数值数据操作之外的承诺不符,例如当您的数据中有大字符串时。
推荐阅读
- c# - 是否可以从异步函数多次返回?
- swift - 如何在 Swift 中挂钩 (swizzle) 方法?
- debugging - 将 HTML 内容分配给 Google 电子表格脚本中的 var
- hadoop - 连续摄取的 HDFS 文件压缩
- javascript - Django/JS/Paypal 按钮集成中的自定义位置选择
- flutter - RenderBox 未布局:RenderPadding#882e9 relayoutBoundary=up5
- javascript - 来自我的反应应用程序的 Axios 将请求发布到快递服务器,给出错误 500
- magnolia - 在 magnolia 的页面详细信息视图中检测 iframe 的变化
- python - 是否使用上下文管理器?
- python - 如何在第一个输入中打印?