在Python中读取镶木地板期间的内存使用率过高

时间:2019-08-09 19:36:47

标签: python memory-management parquet pyarrow

我有一个大约10GB以上的镶木地板文件,其中的列主要是字符串。将其加载到内存中时,内存使用量可以达到110G的峰值,而在完成后,内存使用量可以减少到40G左右。

我正在使用分配了内存的高性能计算机,因此可以访问大内存。但是,对我来说似乎很浪费,因为仅64G就足够了,我只需要申请128G内存才能加载数据。同样,128G内存更经常出现故障。

我天真的猜测是,Python解释器将HPC上的512G物理内存误视为总可用内存,因此它没有按实际需要进行垃圾收集。例如,当我用64G内存加载数据时,它从不会抛出MemoryError,而是直接杀死内核并重新启动。

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

1 个答案:

答案 0 :(得分:1)

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

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

我们还引入了一个选项,可以按类别读取字符串列(在Arrow看来又名DictionaryArray),这也将减少内存使用。请参阅https://issues.apache.org/jira/browse/ARROW-3325

中的讨论

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