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



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

我正在使用具有分配内存的高性能计算机,因此我可以访问大内存。但是,对我来说,我必须申请128G内存只是为了加载数据,之后64G对我来说就足够了。此外,128G 内存更经常出现故障。

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

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

我们修复了 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/

最新更新