Modin:Pandas的并行计算替代方案

在数据科学领域,Pandas库因其数据处理的强大功能而广受欢迎。然而,面对大规模数据集时,Pandas的性能瓶颈变得明显。这是因为Pandas无法并行执行任务,仅利用单个CPU核心运行程序。为了解决这一问题,可能需要转向如Spark这样的分布式计算平台。但这些平台的维护相对复杂,需要理解其计算范式和内部工作原理,对初学者来说门槛较高。Modin库的出现正是为了解决这一问题,它允许用户通过修改一行代码,使Pandas代码并行运行。

Modin是由加州大学伯克利分校RISELab开发的开源库,旨在通过分布式计算加速计算速度。Modin在后端使用Ray/Dask库来并行化代码,用户无需具备分布式计算知识即可使用Modin。Modin DataFrame提供了与Pandas相似的API,因此用户可以继续使用熟悉的Pandas API。Modin在四核笔记本电脑上的速度提升可达4倍,适用于从1MB到1TB大小的数据集。

Modin的安装

Modin可以通过pip命令安装,并使用Ray/Dask库作为后端。如果计算机上尚未预安装Ray/Dask库,可以通过以下命令安装Modin及其依赖项:

pip install "modin[ray]" # 安装Modin依赖项和Ray以在Ray上运行 pip install "modin[dask]" # 安装Modin依赖项和Dask以在Dask上运行 pip install "modin[all]" # 安装上述所有内容

Modin架构

Modin的高级架构图如下所示。目前,可以使用Modin与Pandas API一起使用。SQLite API在Modin中处于实验模式。未来,Modin开发者计划为Modin开发独立的API,但目前尚未开发。位于API层下方的查询编译器层将组合查询并根据数据格式执行一些优化。Modin将与Ray/Dask作为后端运行。由于Modin是一个开源库,也可以使其与自己的后端库一起工作,尽管可以直接在Python中运行Modin而不需要后端,但这不会达到目的,因为Modin本身不能并行运行代码。

Modin DataFrame架构

Modin DataFrame沿行和列进行分区,每个分区是一个单独的Pandas DataFrame。可以通过使用repartition()方法来更改Modin中的默认分区。

实现

可以通过替换Pandas为Modin,仅需一行代码:

import modin.pandas as pd

Modin与Pandas比较

以下是使用Modin和Pandas读取CSV文件的时间比较:

import modin.pandas as pd import time start_time = time.time() data_modin = pd.read_csv("../input/uwmgi-mask-dataset/train.csv") end_time = time.time() duration = end_time - start_time print("Time taken to run the code " + str(duration))

输出结果:

Time taken to run the code 0.4164540767669678

Pandas相比:

import pandas import time start_time = time.time() data_pandas = pandas.read_csv("../input/uwmgi-mask-dataset/train.csv") end_time = time.time() duration = end_time - start_time print("Time taken to run the code " + str(duration))

输出结果:

Time taken to run the code 0.6549224853515625

局限性

Pandas是一个包含广泛API的大型库。尽管Modin支持Pandas的流行API,但它并不支持Pandas的所有API。对于Modin中未实现的函数,它们会自动回退到Pandas。因此,对于未在Pandas中实现的函数和用户定义的函数(Pandas中的apply函数),Modin会将Modin DataFrame转换为Pandas DataFrame,然后应用这些函数。转换为Pandas DataFrame会有一些性能损失。

Dask、Vaex、Ray、Cudf和Koalas是Modin的一些流行替代品。像Dask和Koalas这样的库试图以自己的方式解决大数据集的性能问题,但它们不会保留Pandas API的行为,必须对Pandas代码进行重大更改,使其在dask/Koalas上运行。此外,Dask/Koalas仅支持行分区,而Modin支持DataFrame的行、列和单元格分区,这有助于Modin支持广泛的Pandas API。由于对分区的控制,Modin支持像transpose()、quantile()和median()这样的Pandas方法,这些方法很难应用于基于行的数据分区。

  • 了解了为什么Pandas不适合处理大型数据,以及Modin如何帮助处理大型数据。
  • 了解了Modin的架构。
  • 学习了如何在Python中实现Modin。
  • 经历了Modin的局限性。
  • 最后,比较了Modin与其替代品,并讨论了Modin与其替代品相比的固有优势。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485