You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Anaconda/Jupyter读取Parquet致磁盘骤减问题咨询

读取小Parquet文件后磁盘空间骤降的原因与解决方案

问题原因

  1. Parquet压缩特性与内存膨胀:Parquet是列式压缩格式,17MB的压缩文件展开后,20万行×5160列的原始数据量远大于压缩体积。Pandas加载时会将全量数据读入内存,当物理内存不足时,Windows会自动扩容虚拟内存(pagefile.sys),直接占用磁盘空间。
  2. 临时文件未自动清理:Jupyter内核或Pandas在处理数据过程中,会在系统临时目录(%TEMP%)生成临时缓存文件。这些文件只有在Jupyter进程终止后才会被系统回收,所以重启后磁盘空间恢复。
  3. 数据类型隐式转换:Pandas读取Parquet时,可能将压缩存储的紧凑类型(如低精度整数、布尔值)自动转换为占用更大内存的Python对象类型(如object),进一步加剧内存占用,触发虚拟内存扩容。

限制资源占用的解决方法

1. 优化数据读取逻辑,从源头减少内存占用

  • 按需读取列:只加载业务需要的列,避免全量加载:
    df = pd.read_parquet('filename.parquet', columns=['目标列1', '目标列2'])
    
  • 指定数据类型:提前定义列的dtype,避免自动转换为大内存类型:
    dtype_map = {'列A': 'int32', '列B': 'bool', '列C': 'float32'}
    df = pd.read_parquet('filename.parquet', dtype=dtype_map)
    
  • 使用内存映射读取:借助pyarrow引擎启用内存映射,无需全量加载文件到内存:
    df = pd.read_parquet('filename.parquet', engine='pyarrow', use_memory_map=True)
    

2. 限制Jupyter内核的资源占用

  • 设置内存上限:启动Jupyter前通过环境变量限制Python内存占用,超过阈值时触发报错,避免虚拟内存无限膨胀。在Anaconda Prompt中执行:
    set PYTHONMEMORYLIMIT=5368709120 && jupyter notebook
    
    (上述命令设置内存上限为5GB,可根据剩余磁盘空间调整数值,单位为字节)
  • 及时关闭闲置内核:在Jupyter界面的「Running」标签页中,关闭未使用的内核进程,释放其占用的内存与临时文件。

3. 系统层面优化虚拟内存

  • 手动设置页面文件大小:取消Windows自动管理分页文件,设置固定最大值,避免其无限制占用磁盘:

    右键「此电脑」→「属性」→「高级系统设置」→「高级」→「性能设置」→「高级」→「虚拟内存」→「更改」,取消「自动管理所有驱动器的分页文件大小」,选择系统盘,设置自定义初始大小与最大值(建议最大值不超过剩余磁盘空间的1/2)。

  • 定期清理临时文件:手动删除%TEMP%目录下的缓存文件,或创建Windows任务计划定期自动清理,避免临时文件堆积。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:10:14