pandas 1.3.3执行to_feather在任务计划程序下报ArrowMemoryError求解
问题根因分析
- 架构不匹配:你遇到的
realloc of size 3221225472 failed报错是尝试分配3GB连续内存失败,最常见的原因是批处理/任务计划调用的是32位版本Python,而PyCharm调用的是64位Python。32位Windows程序的用户态内存最大仅支持2-3GB,完全无法满足3GB的分配请求,直接触发内存错误。 - 旧版本PyArrow bug:PyArrow 5.0为2021年发布的旧版本,存在Feather写入时内存预分配计算错误的已知问题,会申请数倍于数据集实际大小的连续内存,270MB的数据集触发3GB内存申请正是该bug导致的。
- 运行环境限制:Windows任务计划默认配置下的内存配额、权限等级低于交互式登录的PyCharm环境,若勾选“无论用户是否登录都运行”选项,还会进一步限制可分配的内存上限;同时批处理未主动指定Python路径时,会优先调用环境变量中排序靠前的32位Python,而非PyCharm使用的64位虚拟环境/全局Python。
解决方案
- 固定64位Python路径
先在脚本开头加入代码确认运行环境:
若确认批处理调用的是32位Python,直接修改批处理命令,写死PyCharm中使用的64位Python绝对路径:import sys, platform print(f"Python位数: {platform.architecture()[0]}") print(f"Python路径: {sys.executable}")call "C:\你的Python64位完整路径\python.exe" "myprogram.py" - 升级PyArrow修复内存bug
直接升级到PyArrow最新稳定版即可解决内存预分配错误问题:
若因项目兼容要求不能升级大版本,可在写入Feather前加入配置禁用预分配:pip install --upgrade pyarrowimport pyarrow as pa pa.set_option("preallocate_contiguous_memory", False) - 优化写入逻辑减少内存占用
现有写法df.reset_index().to_feather()会生成临时DataFrame拷贝,额外占用内存,修改为无临时拷贝的写法:
开启zstd压缩可同时降低文件大小和运行时内存需求。df.reset_index(drop=False, inplace=True) df.to_feather(feather_path, compression="zstd") - 调整任务计划配置
若使用任务计划调度,勾选「使用最高权限运行」,优先选择「仅在用户登录时运行」,避免后台运行的内存配额限制。
内容的提问来源于stack exchange,提问作者SomeDude
相关产品推荐
相关产品推荐

