首页 > 解决方案 > 在python中逐块从url读取一个大的hdf5文件

问题描述

我在位于以下链接的 Amazon Simple Storage Service 上有一个 1.5 TB 大小的 hdf5 文件。我没有磁盘空间来保存它,也没有内存来读取它。因此,我想按块读取它,处理它,然后丢弃读取的部分。我希望使用 pandas 的 read_hdf 来阅读它,但它不支持 url。h5py 库似乎也没有。虽然它确实提到了一个ros3驱动程序,但我还不能让它工作。我也尝试了对这个问题的回答,但是 h5py 无法读取这些块,或者我还没有找到方法。所以我对如何处理这个文件一无所知。有谁知道该怎么做?该文件的链接是这样的:

https://oedi-data-lake.s3-us-west-2.amazonaws.com/building_synthetic_dataset/A_Synthetic_Building_Operation_Dataset.h5

标签: python-3.xpandasamazon-s3hdf5

解决方案


尝试这个:

import requests
from contextlib import closing
url = "https://oedi-data-lake.s3-us-west-2.amazonaws.com/building_synthetic_dataset/A_Synthetic_Building_Operation_Dataset.h5"
with closing(requests.get(url, stream=True)) as r:
    for row in r:
        # Handle each row here...
        print(row)

结果,前两行:

b'\x89HDF\r\n\x1a\n\x00\x00\x00\x00\x00\x08\x08\x00\x04\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xa1\x92\x14\x8d.\x01\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\xa8\x02\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x01\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x11\x00\x10\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00'
b'\xa8\x02\x00\x00\x00\x00\x00\x00TREE\x00\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x000\x04\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

逐行阅读。没有内存消耗。


推荐阅读