这个 Python 库可以将 Pandas 工作负载的运行速度提高 20 倍

了解 FireDucks 如何通过延迟执行、编译器优化和多线程处理来加速 pandas 工作负载,从而在我们的基准测试中将 DataFrame 性能提高高达 20 倍。

来源:KDnuggets

Pandas 通常是我在 Python 中处理表格数据时第一个使用的库。它使用简单,与 Python 数据生态系统的其他部分配合良好,并且可以轻松处理大多数日常数据任务。当数据集变大时,问题就开始了。一旦处理数百万行,排序、过滤、分组和联接等操作就会变得明显缓慢。

这就是 FireDucks 的用武之地。FireDucks 提供了与 pandas 兼容的 API,因此您可以继续使用熟悉的 pandas 语法,同时利用延迟执行、编译器优化和幕后多线程 CPU 处理。

但我想看看在实践中实际会产生多大的差异。在本指南中,我使用包含 1000 万行的相同数据集对 FireDucks 与 pandas 进行了基准测试,并测试了七种常见的数据处理工作负载。

结果非常令人印象深刻。最大的区别来自于对完整数据集的排序,FireDucks 完成操作的速度比 pandas 快 20.77 倍。在所有七个基准测试中,FireDucks 的平均加速速度为 7.28 倍。

在本指南中,我们将安装 FireDucks,将其与熟悉的 pandas 风格代码一起使用,并对这两个库进行基准测试,以了解性能改进的实际来源。

什么是 FireDucks?

FireDucks 是 NEC 开发的编译器加速的 DataFrame 库。它的设计工作原理与 pandas 类似,这意味着您通常可以通过简单地更改 import 语句来测试现有的 pandas 代码。

主要区别在于 FireDucks 执行代码的方式。

Pandas 通常在调用每个操作后立即运行它。 FireDucks 相反使用延迟执行。它首先收集一系列 DataFrame 操作,创建执行计划并对其进行优化,然后跨多个 CPU 核心运行工作负载。

这种方式可以避免不必要的中间计算,显着提高过滤、分组、连接、排序等常用操作的性能。

该 API 与 pandas 高度兼容,但它并不是完全的替代品。 FireDucks DataFrame 内部是不同的对象,您仍然可能会遇到与某些 pandas 功能或第三方库的兼容性差异。

FireDucks 入门

FireDucks 入门非常简单。您可以使用 pip 安装最新版本:

pip install -U fireducks

安装后,最简单的尝试方法是替换正常的 pandas 导入:

导入fireducks.pandas 作为 pd

从那里,您可以继续使用您已经熟悉的 pandas 语法编写代码。

例如:

将 fireducks.pandas 导入为 pd

df = pd.read_parquet("交易.parquet")

结果 = (

df[df["价格"] > 100]

.groupby("类别", as_index=False).agg(总销售额=(“价格”,“总和”),average_price=(“价格”,“平均值”),).sort_values("total_sales", 升序=False))打印(结果)如果你以前使用过pandas,这里没有什么不寻常的。我们加载一个 Parquet 文件,过滤价格大于 100 的行,按类别对数据进行分组,计算一些聚合,并对最终结果进行排序。重要的区别在于幕后发生的事情。我们如何对其进行基准测试为了公平比较,我对 pandas 和 FireDucks 使用了相同的数据集和工作负载。基准测试仅针对 CPU,并在具有以下环境的 Linux 上运行:CPU:9 AMD EPYC 9V74 核心

FireDucks 不一定立即执行每个操作。相反,它可以首先构建和优化操作序列。当您实际需要结果时(例如调用 print() 时),会触发延迟执行,并且 FireDucks 运行优化的工作负载。

我们生成了一个可重现的 1000 万行数据集以及一个单独的 200 万行查找表。该基准测试涵盖了七种常见的 DataFrame 工作负载:Parquet 读取、过滤、低基数 groupby、高基数 groupby、排序、连接以及更现实的链式数据处理管道。

每个工作负载接受一次热身运行,然后进行五次测量运行。我们交替了 pandas 和 FireDucks 之间的执行顺序,报告了中值执行时间,并验证了两个库产生了相同的输出。

  • 由于 FireDucks 使用延迟执行,因此其结果使用 ._evaluate() 显式具体化,以便基准测试捕获实际执行时间。
  • 内存:15.93 GiB
  • Python:3.12.13
  • 熊猫:2.3.3
  • FireDucks:1.4.4
  • NumPy:2.5.2
  • PyArrow:21.0.0
  • pandas 与 FireDucks 基准测试结果

    运行基准测试后,这些是我们在所有七个工作负载中获得的结果。

    FireDucks 在每次测试中都更快。最大的改进来自排序,加速了 20.77 倍,其次是低基数 groupby,加速为 15.44 倍,过滤加速为 11.63 倍。

    即使对于更现实的链式管道,FireDucks 完成工作负载的速度也比 pandas 快 5.94 倍。

    FireDucks 真的能让 Panda 速度提高 20 倍吗?

    是的,但不适用于所有工作负载。

    在我们的基准测试中,在对完整的 1000 万行数据集进行排序时,FireDucks 比 pandas 快 20.77 倍。在所有七项测试中,我们看到加速范围从 2.66 倍到 20.77 倍,几何平均值为 7.28 倍。

    而且我们并不是唯一看到这些改进的人。丰田技术开发公司 (TTDC) 在其内部 AI 框架中测试了 FireDucks,报告数据分析时间减少了 60%,分析 PC 操作时间减少了 76%。

    数据科学作家 Avi Chawla 还在 Google Colab 上测试了 FireDucks,发现 pandas 代码从 12.3 秒下降到 3.5 秒,大约加速了 4 倍。

    所以,是的,FireDucks 可以显着加快 pandas 工作负载的速度。只是不要每次都期望 20 倍 - 实际的改进取决于您的数据、操作、硬件和工作负载。

    最后的想法

    FireDucks 给我印象最深的不仅仅是基准测试数据,还有它的上手是多么简单。我安装了该库,更改了 pandas 导入,并运行了与我已经使用的几乎相同的管道。它开箱即用,并且速度明显更快。

    在我们的基准测试中,FireDucks 在所有七个工作负载中的速度都更快,加速范围为 2.66 倍到 20.77 倍。当然,您不会每次都获得 20 倍的改进,但这里有很大的潜力 - 特别是对于 FireDucks 可以充分利用延迟执行和多个 CPU 核心的工作负载。

    当您处理大型数据集时,即使是很小的性能改进也可能很重要。更快的管道可以降低计算成本,加快实验速度,并让您每天多次运行相同的分析,而无需花费太多时间等待结果。

    Abid Ali Awan (@1abidaliawan) 是一位经过认证的数据科学家专业人士,热爱构建机器学习模型。目前,他专注于内容创作和撰写有关机器学习和数据科学技术的技术博客。阿比德拥有技术管理硕士学位和电信工程学士学位。他的愿景是使用图神经网络为患有精神疾病的学生构建人工智能产品。