我有一个大约 10+GB 的 Parquet 文件,列主要是字符串。加载到内存时,内存使用量最高可达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
我们还引入了一个选项来读取字符串列作为分类(在 Arrow 的说法中又名 DictionaryArray
),这也将减少内存使用。见 https://issues.apache.org/jira/browse/ARROW-3325和讨论
https://ursalabs.org/blog/2019-06-07-monthly-report/
关于python - 在 Python 中读取 Parquet 时内存使用率过高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57436169/