Windows下Anaconda/Jupyter读取Parquet致磁盘骤减问题咨询
读取小Parquet文件后磁盘空间骤降的原因与解决方案
问题原因
- Parquet压缩特性与内存膨胀:Parquet是列式压缩格式,17MB的压缩文件展开后,20万行×5160列的原始数据量远大于压缩体积。Pandas加载时会将全量数据读入内存,当物理内存不足时,Windows会自动扩容虚拟内存(pagefile.sys),直接占用磁盘空间。
- 临时文件未自动清理:Jupyter内核或Pandas在处理数据过程中,会在系统临时目录(
%TEMP%)生成临时缓存文件。这些文件只有在Jupyter进程终止后才会被系统回收,所以重启后磁盘空间恢复。 - 数据类型隐式转换: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中执行:
(上述命令设置内存上限为5GB,可根据剩余磁盘空间调整数值,单位为字节)set PYTHONMEMORYLIMIT=5368709120 && jupyter notebook - 及时关闭闲置内核:在Jupyter界面的「Running」标签页中,关闭未使用的内核进程,释放其占用的内存与临时文件。
3. 系统层面优化虚拟内存
- 手动设置页面文件大小:取消Windows自动管理分页文件,设置固定最大值,避免其无限制占用磁盘:
右键「此电脑」→「属性」→「高级系统设置」→「高级」→「性能设置」→「高级」→「虚拟内存」→「更改」,取消「自动管理所有驱动器的分页文件大小」,选择系统盘,设置自定义初始大小与最大值(建议最大值不超过剩余磁盘空间的1/2)。
- 定期清理临时文件:手动删除
%TEMP%目录下的缓存文件,或创建Windows任务计划定期自动清理,避免临时文件堆积。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

