Sym*_*ger 5 python memory-management parquet pyarrow
我有一个大约 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/