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

如何在Python中直接从URL读取大型HDF5文件目录且无需Google Colab Pro

问题根因

你现有代码的逻辑是将整个1.2TB的HDF5文件一次性全部加载到Colab运行时内存中,而Colab免费版运行时可用内存仅为10~12GB,内存溢出会直接触发崩溃,该问题和是否开通Colab Pro没有直接关联,无需升级即可解决。

可行方案

采用S3流式读取+按需加载的逻辑,不需要拉取全量文件到本地,仅读取你需要的数据集片段即可,具体操作如下:

  1. 首先安装所需依赖
!pip install s3fs h5py h5netcdf xarray
  1. 流式访问S3公开桶的数据集
    该数据集存放在公开可访问的AWS S3桶中,无需配置密钥即可直接访问,示例代码如下:
import s3fs
import h5py
import xarray as xr

# 初始化匿名S3文件系统,匹配桶所在的区域
fs = s3fs.S3FileSystem(anon=True, client_kwargs={'region_name': 'us-west-2'})

# 流式打开HDF5文件,不会加载全量数据到内存
with fs.open('oedi-data-lake/building_synthetic_dataset/A_Synthetic_Building_Operation_Dataset.h5', 'rb') as f:
    # 方案1:用h5py按需读取指定字段
    with h5py.File(f, 'r') as h5_file:
        # 仅读取你需要的子数据集切片即可,不要读取整个数组
        # 示例:读取指定路径下前1000条数据
        target_data = h5_file['/替换为你需要的数据集在H5内的路径'][:1000]
        print(target_data.shape)
    
    # 方案2:用xarray懒加载,配合分块仅在计算时拉取对应数据
    ds = xr.open_dataset(f, engine='h5netcdf', chunks={})
    # 后续对ds的操作仅会加载你用到的对应数据块,不会占满内存
  1. 遍历目录下的所有文件
    如果你需要访问整个目录下的多个文件,可以用s3fs直接列取目录内容,不需要手动拼接URL:
# 列出数据集根目录下的所有文件/子文件夹
for path in fs.glob('oedi-data-lake/building_synthetic_dataset/*'):
    print(path)
注意事项
  • 不要调用resp.read()这类读取全量文件内容的方法,所有数据读取操作都按需求取切片
  • 使用xarray时建议开启分块配置,基于dask的懒加载机制可以进一步降低内存占用
  • 该方案完全适配Colab免费版的资源限制,无需升级Pro即可运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:54:03