我正在试用Bodo来加速某些Pandas操作,第一个是pd.read_csv(...)
。Bodo要求兼容的Pandas代码在一个单独的函数中,与非Bodo兼容的代码分开。例如,这是我的代码:
- 与波多**
import bodo
@bodo.jit
def loadDataFileWithJIT(filePath):
df = pd.read_csv(filePath, header=0, sep="\t", names=["patid", "eventdate", "prodcode", "consid", "issueseq"],
usecols=[0, 1, 3, 4, 12],
dtype={"patid": "str", "eventdate": "str", "prodcode": "str", "consid": "str", "issueseq": "str"},
low_memory=False)
return df
超过5个文件,我看到这些时间:
- 14.24〈---第一次,这是JIT编译的时候
- 9.67
- 10.72
- 9.51
- 9.42
- 没有Bodo**(函数装饰器和import语句已被删除......其他内容未更改):
- 4.66
- 4.68
- 4.59
- 4.61
- 4.60
每个文件大约为170MB。
更新
与Bodo的作者谈过之后,如果我想看到速度的提高,我需要从mpiexec -n
#(其中#是核心数〉1)运行Python。
1条答案
按热度按时间dw1jzc5e1#
TLDR:加速I/O操作需要并行性。您需要在多个进程中使用mpiexec。
Bodo目前在底层重用panda read_csv以确保完全兼容。JIT编译支持并行性,但在单核上没有任何改进(事实上,正如您所观察到的,会有一些开销)。
您可以使用ipyparallel在单个进程中启动和管理Bodo/MPI进程:https://github.com/ipython/ipyparallel
Bodo Slack讨论:https://bodocommunity.slack.com/archives/C01KRTQ1KDY/p1661704632557289