使用JIT Bodo的Pandas read_csv比常规Python慢

gajydyqb  于 2023-02-02  发布在  Python
关注(0)|答案(1)|浏览(177)

我正在试用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。

dw1jzc5e

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

相关问题