Прочитайте большой файл hdf5 с url по частям в python

#python-3.x #pandas #amazon-s3 #hdf5

Вопрос:

У меня есть файл hdf5 размером 1,5 терабайта в сервисе Amazon Simple Storage, расположенном по ссылке ниже. У меня нет места на диске, чтобы сохранить его, и у меня нет памяти, чтобы прочитать его. Соответственно, я хочу прочитать его по частям, обработать его и отбросить прочитанную часть. Я надеялся использовать файл read_hdf pandas для его чтения, но он не поддерживает URL-адреса. Как и библиотека h5py, похоже, тоже. Хотя в нем упоминается ros3 водитель, но я еще не смог заставить его работать. Я также попробовал ответить на этот вопрос, но фрагменты не могут быть прочитаны h5py, или я еще не нашел способ. Так что я, скорее, остался без понятия о том, как обработать этот файл. У кого-нибудь есть какие-нибудь идеи, как это сделать? Ссылка на файл такова:

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

Ответ №1:

Попробуй это:

 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'x89HDFrnx1anx00x00x00x00x00x08x08x00x04x00x10x00x00x00x00x00x00x00x00x00x00x00x00x00xffxffxffxffxffxffxffxffxa1x92x14x8d.x01x00x00xffxffxffxffxffxffxffxffx00x00x00x00x00x00x00x00`x00x00x00x00x00x00x00x01x00x00x00x00x00x00x00x88x00x00x00x00x00x00x00xa8x02x00x00x00x00x00x00x01x00x01x00x01x00x00x00x18x00x00x00x00x00x00x00x11x00x10x00x00x00x00x00x88x00x00x00x00x00x00x00'
b'xa8x02x00x00x00x00x00x00TREEx00x00x01x00xffxffxffxffxffxffxffxffxffxffxffxffxffxffxffxffx00x00x00x00x00x00x00x000x04x00x00x00x00x00x00(x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00'
 

Строчное чтение. Никакого потребления памяти.

Комментарии:

1. Но как мне теперь читать двоичный файл? Я имею в виду, что строки являются двоичными, я должен каким-то образом суметь преобразовать их в полезные данные. Фактические файлы в файле hdf5 похожи на файлы csv. Но они недоступны. Кроме того, в чем преимущество этого по сравнению с простыми запросами,полученными с потоком?