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

35

我需要将一个大的pandas DataFrame 导入到 PostgreSQL 数据库中。从我所了解的来看,一次性全部导入不是一个好主意(我已经锁定了数据库),而是使用 chunksize 参数。这个答案对于工作流程很有帮助,但我想知道 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)

是否有建议的默认值,设置参数更高或更低时性能有区别吗?假设我有足够的内存支持更大的块大小,那么会执行得更快吗?


3
请注意,您链接的问题是关于 read_csv 的,因此并不完全相关。to_sqlchunksize 对于遇到超时错误时非常有用(请参见http://pandas.pydata.org/pandas-docs/stable/io.html#writing-dataframes 或 https://dev59.com/kmAg5IYBdhLWcg3wE3jQ)。如果您没有遇到这个问题,则不需要使用 chunksize - joris
2
使用chunksize进行数据处理的基准测试,请参考相关链接 - Kevin
2个回答

11
在我的情况下,我使用pandas的to_sql函数参数chunksize=5000和method='multi',将3M行5列的数据插入到数据库中仅用了8分钟。这是一个非常大的改进,因为使用python将3M行数据插入到数据库变得非常困难。

3

我尝试了另一种方式,将SQL转换为CSV格式。我发现,分块大小越小,处理速度越快。将任务添加到多个CPU上(多进程)并没有改变什么。


4
并不总是分块大小越小,处理速度就越快。根据这篇文章(https://acepor.github.io/2017/08/03/using-chunksize)的观察,将分块大小设置为10000似乎是最优的选择。 - Ethan Chen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接