跳至内容

Bodo Python 快速入门

本快速入门指南将引导您完成在本地机器上使用Bodo运行简单Python计算的过程。

先决条件

Install Bodo 开始使用 (例如:pip install bodoconda install bodo -c bodo.ai -c conda-forge)。

生成示例数据

让我们从创建一个包含示例数据的Parquet文件开始。以下Python代码创建一个包含两列AB以及2000万行的Parquet文件。列A包含从0到29的值,列B包含从0到19,999,999的值。

import pandas as pd
import numpy as np
import bodo
import time

NUM_GROUPS = 30
NUM_ROWS = 20_000_000
df = pd.DataFrame({
    "A": np.arange(NUM_ROWS) % NUM_GROUPS,
    "B": np.arange(NUM_ROWS)
})
df.to_parquet("my_data.pq")

一个简单的Pandas计算

现在让我们编写一个简单的Python函数,使用pandas计算列B除以列A的值(当A不为零时)。我们用@bodo.jit装饰这个函数,表示我们希望使用Bodo编译这段代码。同时添加一个计时器来测量执行时间。

@bodo.jit(cache=True)
def computation():
    t1 = time.time()
    df = pd.read_parquet("my_data.pq")
    df2 = pd.DataFrame({"A": df.apply(lambda r: 0 if r.A == 0 else (r.B // r.A), axis=1)})
    df2.to_parquet("out.pq")
    print("Execution time:", time.time() - t1)

computation()

运行代码

将所有内容整合起来,完整的代码如下所示:

import pandas as pd
import numpy as np
import bodo
import time

NUM_GROUPS = 30
NUM_ROWS = 20_000_000

df = pd.DataFrame({
    "A": np.arange(NUM_ROWS) % NUM_GROUPS,
    "B": np.arange(NUM_ROWS)
})
df.to_parquet("my_data.pq")

@bodo.jit(cache=True)
def computation():
    t1 = time.time()
    df = pd.read_parquet("my_data.pq")
    df2 = pd.DataFrame({"A": df.apply(lambda r: 0 if r.A == 0 else (r.B // r.A), axis=1)})
    df2.to_parquet("out.pq")
    print("Execution time:", time.time() - t1)

computation()

要运行代码,请将其保存到一个文件中,例如test_bodo.py,然后在终端中运行以下命令:

python test_bodo.py

默认情况下,Bodo会使用所有可用的核心。要限制生成的进程数量,请设置环境变量BODO_NUM_WORKERS。 请注意,第一次运行此代码时,可能需要几秒钟来编译代码。 下次运行代码时,执行速度会快得多。查看Python API Reference获取支持的Python操作的完整列表。