Modin - pandas 替代和扩展
文章目录
- 一、关于 Modin?
- 二、安装
- 1、使用 PyPI
- 2、 conda-forge
- 3、选择计算引擎
- 4、我应该使用哪个引擎?
- 三、Pandas API 覆盖范围
- 通过更改一行代码来扩展您的 pandas 工作流程。
- 更快的 pandas,甚至在你的笔记本电脑上
- Modin可以处理pandas无法处理的数据集
- Modin 架构
- 四、其他资源
- 使用 Modin 入门
- Modin 社区
- 了解更多关于 Modin 的信息
一、关于 Modin?
Modin 是 pandas 的直接替代品。
pandas 是单线程,Modin 允许您通过扩展 pandas 以使其利用所有您的 cores.
Modin特别适用于较大的数据集,在这些数据集中,pandas会变得非常慢或运行缓慢 内存不足.
此外,Modin 还附带 额外的 API 以提高用户体验。
通过简单地替换导入语句,Modin 为用户提供了轻松的速度和可扩展性,以支持他们的 pandas 工作流程:
import pandas as pd
import modin.pandas as pd
- github : https://github.com/modin-project/modin
- 官方文档:https://modin.readthedocs.io/en/latest/
- Stack over flow : https://stackoverflow.com/questions/tagged/modin
- SLACK : https://join.slack.com/t/modin-project/shared_invite/zt-yvk5hr3b-f08p_ulbuRWsAfg9rMY3uA
- Twitter : https://twitter.com/modin_project
下图显示了根据上述示例用Modin替换pandas所获得的加速。示例笔记本可以在此处找到。
要了解更多关于Modin的加速效果,并自己尝试一些示例,请查看我们的10分钟快速入门指南自己尝试一些例子!
二、安装
1、使用 PyPI
Modin 可以使用 pip
在 Linux、Windows 和 MacOS 上进行安装:
pip install "modin[all]" # (Recommended) Install Modin with Ray and Dask engines.
如果您想使用特定引擎安装 Modin,我们推荐:
pip install "modin[ray]" # Install Modin dependencies and Ray.
pip install "modin[dask]" # Install Modin dependencies and Dask.
pip install "modin[mpi]" # Install Modin dependencies and MPI through unidist.
要通过unidist(从unidist 0.5.0开始)使Modin在MPI上完全工作,需要事先安装一个可工作的MPI实现。
否则,modin[mpi]
的安装可能会失败。请参阅 使用pip安装 部分了解有关安装的更多详细信息。
注意: 自Modin 0.30.0以来,我们使用了一组减少的Ray依赖关系:Ray
而不是Ray[default]
。这意味着默认情况下不再安装仪表板和集群启动器。如果你需要这些,可以考虑安装ray[default]
和modin[ray]
。
Modin会自动检测您安装的引擎,并将其用于调度计算。
2、 conda-forge
从 conda forge 使用 modin-all
安装
将安装 Modin 和三个引擎:Ray, Dask 和
通过 unidist 使用 MPI.
conda install -c conda-forge modin-all
每个引擎也可以单独安装(也可以作为几个引擎的组合进行安装):
conda install -c conda-forge modin-ray # Install Modin dependencies and Ray.
conda install -c conda-forge modin-dask # Install Modin dependencies and Dask.
conda install -c conda-forge modin-mpi # Install Modin dependencies and MPI through unidist.
注意: 自 Modin 0.30.0 版本起,我们使用了一个更少的 Ray 依赖集:ray-core
而不是 ray-default
。
这意味着仪表板和集群启动器不再默认安装。
如果您需要这些,请考虑安装 ray-default
和 modin-ray
。
参考:使用 conda 安装
关于如何在特定系统上运行如何安装特定MPI实现的详细信息,请参阅unidist文档的相应部分。
为了加快 conda 安装速度,我们建议使用 libmamba 求解器。为此,在基础环境中安装它:
conda install -n base conda-libmamba-solver
然后在使用安装程 序时,可以像这样使用:
conda install -c conda-forge modin-ray --experimental-solver=libmamba
或从 conda 22.11 和 libmamba solver 22.12 版本开始:
conda install -c conda-forge modin-ray --solver=libmamba
3、选择计算引擎
如果您想选择特定的计算引擎来运行,您可以为环境设置
变量 MODIN_ENGINE
和 Modin 将使用该引擎进行计算:
export MODIN_ENGINE=ray # Modin will use Ray
export MODIN_ENGINE=dask # Modin will use Dask
export MODIN_ENGINE=unidist # Modin will use Unidist
如果您想选择 Unidist 引擎,您应该设置附加的环境变量 UNIDIST_BACKEND
。目前,
Modin 仅通过 unidist 支持MPI:
export UNIDIST_BACKEND=mpi # Unidist will use MPI backend
这也可以在导入 Modin 之前在笔记本/解释器中完成:
import modin.config as modin_cfg
import unidist.config as unidist_cfg
modin_cfg.Engine.put("ray") # Modin will use Ray
modin_cfg.Engine.put("dask") # Modin will use Dask
modin_cfg.Engine.put('unidist') # Modin will use Unidist
unidist_cfg.Backend.put('mpi') # Unidist will use MPI backend
注意:您在使用 Modin 进行首次操作后不应更改引擎,因为这会导致未定义的行为。
4、我应该使用哪个引擎?
在 Linux、MacOS 和 Windows 上,您可以通过 unidist 安装并使用 Ray、Dask 或 MPI。
使用这些引擎无需任何知识,因为 Modin 隐藏了所有复杂性,所以任意选择任何一个!
三、Pandas API 覆盖范围
pandas 对象 | Modin 的 Ray 引擎覆盖范围 | Modin 的 Dask 引擎覆盖范围 | Modin 的 Unidist 引擎覆盖范围 |
---|---|---|---|
pd.DataFrame | api coverage 90.8% | api coverage 90.8% | api coverage 90.8% |
pd.Series | api coverage 88.05% | api coverage 88.05% | api coverage 88.05% |
pd.read_csv | ✅ | ✅ | ✅ |
pd.read_table | ✅ | ✅ | ✅ |
pd.read_parquet | ✅ | ✅ | ✅ |
pd.read_sql | ✅ | ✅ | ✅ |
pd.read_feather | ✅ | ✅ | ✅ |
pd.read_excel | ✅ | ✅ | ✅ |
pd.read_json | ✳️ | ✳️ | ✳️ |
pd.read_<other> | ✴️ | ✴️ | ✴️ |
通过更改一行代码来扩展您的 pandas 工作流程。
注意:在本地模式(没有集群)下,Modin将为执行创建和管理本地(Dask或Ray)集群
要使用Modin,您不需要指定如何分发数据,甚至不需要知道您的系统有多少内核。
事实上,即使在一台机器上,您也可以继续使用之前的pandas笔记本电脑,同时体验到Modin的显著加速。
一旦您更改了导入语句,您就可以像使用pandas一样使用Modin了!
更快的 pandas,甚至在你的笔记本电脑上
modin.pandas
DataFrame是一个极其轻量级的并行DataFrame。
Modin透明地分发数据和计算,以便您可以继续使用相同的pandas API,同时更快地处理更多数据。由于重量轻,Modin在具有4个物理内核的笔记本电脑上提供了高达4倍的速度。
在pandas中,当你进行任何类型的计算时,一次只能使用一个核心。使用Modin,您可以使用计算机上的所有CPU内核。
即使是像 read_csv
这样的传统同步任务,通过在整个机器上有效地分配工作,我们也会看到巨大的加速。
import modin.pandas as pd
df = pd.read_csv("my_dataset.csv")
Modin可以处理pandas无法处理的数据集
数据科学家经常需要在不同的工具之间切换,以便对不同大小的数据集进行操作。
使用pandas处理大型数据帧很慢,并且pandas不支持处理太大而无法放入可用内存的数据帧。
因此,在几MB数据上进行原型设计的pandas工作流不会扩展到数十或数百GB(取决于您的机器大小)。
Modin支持对不适合内存的数据进行操作,因此您可以轻松地处理数百GB的数据,而不必担心速度大幅减慢或内存错误。
使用 集群 和核心外 支持,Modin是一个DataFrame库,在集群中具有出色的单节点性能和高可扩展性。
Modin 架构
我们设计了 Modin 的架构 以便模块化,这样我们就可以在它们发展和改进时插入不同的组件:
四、其他资源
使用 Modin 入门
- 文档
- 10分钟快速入门指南
- 示例和教程
- 视频和博客文章
- 基准测试 Modin
Modin 社区
- Slack
- 邮件列表
- GitHub 问题
- StackOverflow
了解更多关于 Modin 的信息
- 常见问题解答 (FAQs)
- 故障排除指南
- 开发指南
- Modin 是在加州大学伯克利分校多年研究和开发的基础上构建的。查看以下精选论文,了解 Modin 的工作原理:
- Flexible Rule-Based Decomposition and Metadata Independence in Modin (VLDB 2021)
- Dataframe Systems: Theory, Architecture, and Implementation (PhD Dissertation 2021)
- Towards Scalable Dataframe Systems (VLDB 2020)
2025-03-30(日)