Bodo Python 快速入门¶
本快速入门指南将引导您完成在本地机器上使用Bodo运行简单Python计算的过程。
先决条件¶
Install Bodo 开始使用 (例如:pip install bodo 或 conda install bodo -c bodo.ai -c conda-forge)。
生成示例数据¶
让我们从创建一个包含示例数据的Parquet文件开始。以下Python代码创建一个包含两列A和B以及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,然后在终端中运行以下命令:
默认情况下,Bodo会使用所有可用的核心。要限制生成的进程数量,请设置环境变量BODO_NUM_WORKERS。
请注意,第一次运行此代码时,可能需要几秒钟来编译代码。
下次运行代码时,执行速度会快得多。查看Python API Reference获取支持的Python操作的完整列表。