我有一个大约10GB以上的镶木地板文件,其中的列主要是字符串。将其加载到内存中时,内存使用量可以达到110G的峰值,而在完成后,内存使用量可以减少到40G左右。
我正在使用分配了内存的高性能计算机,因此可以访问大内存。但是,对我来说似乎很浪费,因为仅64G就足够了,我只需要申请128G内存才能加载数据。同样,128G内存更经常出现故障。
我天真的猜测是,Python解释器将HPC上的512G物理内存误视为总可用内存,因此它没有按实际需要进行垃圾收集。例如,当我用64G内存加载数据时,它从不会抛出MemoryError,而是直接杀死内核并重新启动。
我想知道加载时内存的过度使用是pyarrow的常规行为,还是由于我的环境的特殊设置。如果是后者,那么是否有可能以某种方式限制加载期间的可用内存?
答案 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和