pandas.DataFrame.to_sql中的最佳chunksize参数

Kev*_*vin 9 python postgresql pandas

使用需要转储到PostgreSQL表中的大熊猫DataFrame。从我读到的内容来看,一次全部转储不是一个好主意,(并且我正在锁定数据库)而是使用该chunksize参数。此处的答案对工作流程很有帮助,但我只是在问块大小影响性能的价值。

In [5]: df.shape
Out[5]: (24594591, 4)

In [6]: df.to_sql('existing_table',
                  con=engine, 
                  index=False, 
                  if_exists='append', 
                  chunksize=10000)
Run Code Online (Sandbox Code Playgroud)

将参数设置为较高或较低时,是否有建议的默认值,并且在性能上有区别吗?假设我有支持更大块大小的内存,它执行得更快吗?

小智 11

to_sql就我而言,当我使用 pandas函数参数为 chunksize=5000 和 method='multi'时,5 列的 3M 行在 8 分钟内插入。这是一个巨大的改进,因为使用 python 将 300 万行插入数据库对我来说变得非常困难。


Moh*_*iri 3

我尝试了相反的方法。从 sql 到 csv,我注意到块越小,工作完成得越快。向作业添加额外的 cpu(多处理)并没有改变任何东西。

  • 块大小越小,过程可能越快,但情况并不总是如此。根据本文(https://acepor.github.io/2017/08/03/using-chunksize)的观察,将 chunksize 设置为 10000 似乎是最佳的。 (4认同)