python - 在 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和讨论
推荐阅读
- python - Pygments 的 ImageFormatter 找不到字体
- django - Django:设置'对象没有属性'LOGFILE'
- typescript - 工厂类创建无类型对象
- facebook - 显示/隐藏 Facebook 聊天插件
- r - 如何创建一个均值表示为短线而不是 R 中的点的条形图?
- twilio - 如何通过 VoIP 实现 twilio Click To Call?
- postgresql - 在 .netcore 3.1 中,无法确定一对一关系的子/依赖方
- .net-core - 未找到 dotnet 交互式 jupyter 安装命令
- azure-devops - 无法从库中获取函数 SetDetourProvider 的地址
- unity3d - Unity GUI 总是出现在另一个游戏对象的顶部