首页 > 解决方案 > 在 Python 中读取镶木地板时内存使用率过高

问题描述

我有一个大约 10+GB 的镶木地板文件,列主要是字符串。加载到内存时,内存使用峰值可以达到 110G,而加载完成后,内存使用会降低到 40G 左右。

我正在使用分配内存的高性能计算机,因此我可以访问大内存。但是,我觉得为了加载数据而申请128G的内存是很浪费的,毕竟64G对我来说已经足够了。还有,128G内存更经常出问题。

我幼稚的猜想是 Python 解释器将 HPC 上的 512G 物理内存误认为是总可用内存,因此它不会像实际需要那样频繁地进行垃圾收集。例如,当我用 64G 内存加载数据时,它从来没有给我一个 MemoryError 而是直接杀死内核并重新启动。

我想知道加载时内存使用率过高是否是pyarrow的常规行为,还是由于我的环境的特殊设置。如果是后者,那么是否有可能在加载过程中以某种方式限制可用内存?

标签: pythonmemory-managementparquetpyarrow

解决方案


我们修复了 0.14.0/0.14.1 中存在的内存使用错误(这可能是您现在正在使用的)。

https://issues.apache.org/jira/browse/ARROW-6060

我们还引入了一个选项,可以将字符串列读取为分类(也称为DictionaryArray箭头术语),这也将减少内存使用量。请参阅https://issues.apache.org/jira/browse/ARROW-3325和讨论

https://ursalabs.org/blog/2019-06-07-monthly-report/


推荐阅读