Ai学习的老章
长期跟踪关注统计学、机器学习算法、深度学习、人工智能、大模型技术与行业发展动态,日更精选技术文章。回复机器学习有惊喜资料。
672篇原创内容
公众号
FireDucks 是一个完全兼容 Pandas 的加速库,它不是要替代 Pandas,而是作为 Pandas 的加速器工作。它允许用户继续使用熟悉的 Pandas API,同时显著提高执行速度。
FireDucks 通过两种主要方法加速 Pandas 操作:
FireDucks 目前支持 Linux (manylinux) 在 x86_64 架构上,可以通过 pip 轻松安装:
pip install fireducks
要求 Python >3.8, <=3.13(注意:自 FireDucks 1.1.0 起,由于升级了依赖的 pyarrow 到 18.0.0,不再支持 Python 3.8)
在 Python 脚本中使用:
python3 -m fireducks.pandas your_script.py
在 IPython/Jupyter Notebook 中使用:
%load_ext fireducks.pandas
import pandas as pd
# 后续代码与使用 Pandas 完全相同
# 替换 import pandas as pd
import fireducks.pandas as pd
以下是一个简单的性能对比示例:
import time
import numpy as np
import pandas as pd
import fireducks.pandas as fpd
n = _000_000
np.random.seed()
data = {
"x": np.random.randint(, , n),
"y": np.random.rand(n)
}
df_pandas = pd.DataFrame(data)
df_fireducks = fpd.DataFrame(data)
start_pd = time.time()
sorted_pd = df_pandas.sort_values("x")
time_pd = time.time() - start_pd
start_fd = time.time()
sorted_fd = df_fireducks.sort_values("x")
time_fd = time.time() - start_fd
print("Pandas 排序时间:{:.4f} 秒".format(time_pd))
print("FireDucks 排序时间:{:.4f} 秒".format(time_fd))
结果:
Pandas 排序时间: 0.0009 秒
FireDucks 排序时间: 0.0004 秒
在更大的数据集和更复杂的操作中,性能差异会更加明显。
由于 FireDucks 使用惰性执行模型,测量单个方法的性能需要特别注意。有三种方法可以准确测量性能:
# 通过环境变量
FIREDUCKS_FLAGS="--benchmark-mode"
# 或在代码中
from fireducks.core import get_fireducks_options
get_fireducks_options().set_benchmark_mode(True)
_evaluate()
方法:
t0 = time.time()
df = pd.read_csv("data.csv")._evaluate()
t1 = time.time()
df = df.sort_values("a")._evaluate()
t2 = time.time()
FireDucks 团队评估了 db-benchmark[1] 的性能,该基准测试包括在多种大小的数据集上执行基本数据科学操作的场景。
截至 2024 年 9 月 10 日,FireDucks 在大数据的分组(groupby)和连接(join)操作方面似乎是最快的数据框架库。
测试环境:
TPC-H 是一个决策支持基准测试,包含复杂的查询和大量数据修改。
上图比较了四个数据框架库(Pandas、DuckDB、Polars 和 FireDucks)在 22 个不同查询上的性能。垂直轴以对数刻度显示与 Pandas 相比快多少倍,大于 1 表示比 Pandas 快。
测试环境:
TPCx-BB 包括与使用机器学习及其预处理的数据分析相关的查询。
在 TPCx-BB 测试中,FireDucks 比 Pandas 最高快 17 倍,平均快 6.7 倍。
测试环境:
由于惰性执行模型,使用传统的 try-catch 块检查 KeyError 可能不会按预期工作:
# 不推荐的方式
def project(df, cname):
try:
s = df[cname] # 由于惰性执行,这里不会立即执行
except KeyError:
print(f"列 {cname} 在输入数据框中不存在")
else:
return s
推荐的方式:
# 推荐方式 1:使用 _evaluate() 强制执行
def project(df, cname):
try:
s = df[cname]._evaluate()
except KeyError:
print(f"列 {cname} 在输入数据框中不存在")
else:
return s
# 推荐方式 2:使用 in 操作符
def project(df, cname):
if cname notin df: # 这会立即执行
print(f"列 {cname} 在输入数据框中不存在")
else:
s = df[cname]
return s
您可以通过 Google Colab 免费体验 FireDucks 的易用性和高性能:
FireDucks 是一个强大的 Pandas 加速库,通过编译器优化和多线程处理,显著提高了数据处理速度,同时保持了与 Pandas 的完全兼容性。它特别适合处理大型数据集和复杂的数据操作,可以轻松集成到现有的 Pandas 代码中,无需大量修改。
根据多项基准测试,FireDucks 在各种数据处理场景中都展现出了显著的性能优势,尤其是在处理大型数据集和复杂查询时。
Ai学习的老章
长期跟踪关注统计学、机器学习算法、深度学习、人工智能、大模型技术与行业发展动态,日更精选技术文章。回复机器学习有惊喜资料。
672篇原创内容
公众号
参考资料
[1]
db-benchmark: https://github.com/duckdblabs/db-benchmark
[2]
pandas_nyc_demo.ipynb: https://colab.research.google.com/github/fireducks-dev/fireducks/blob/main/notebooks/nyc_demo/pandas_nyc_demo.ipynb
[3]
fireducks_pandas_nyc_demo.ipynb: https://colab.research.google.com/github/fireducks-dev/fireducks/blob/main/notebooks/nyc_demo/fireducks_pandas_nyc_demo.ipynb
[4]
FireDucks_vs_Pandas_vs_Polars.ipynb: https://colab.research.google.com/github/fireducks-dev/fireducks/blob/main/notebooks/FireDucks_vs_Pandas_vs_Polars.ipynb
[5]
https://fireducks-dev.github.io: https://fireducks-dev.github.io
[6]
https://github.com/fireducks-dev/fireducks: https://github.com/fireducks-dev/fireducks
[7]
contact@fireducks.jp.nec.com: mailto:contact@fireducks.jp.nec.com
[8]
加入 FireDucks Slack: https://join.slack.com/t/fireducks/shared_invite/zt-2j4lucmtj-IGR7AWlXO62Lu605pnBJ2w