#python-3.x #pandas #amazon-s3 #hdf5
Вопрос:
У меня есть файл hdf5 размером 1,5 терабайта в сервисе Amazon Simple Storage, расположенном по ссылке ниже. У меня нет места на диске, чтобы сохранить его, и у меня нет памяти, чтобы прочитать его. Соответственно, я хочу прочитать его по частям, обработать его и отбросить прочитанную часть. Я надеялся использовать файл read_hdf pandas для его чтения, но он не поддерживает URL-адреса. Как и библиотека h5py, похоже, тоже. Хотя в нем упоминается ros3
водитель, но я еще не смог заставить его работать. Я также попробовал ответить на этот вопрос, но фрагменты не могут быть прочитаны h5py, или я еще не нашел способ. Так что я, скорее, остался без понятия о том, как обработать этот файл. У кого-нибудь есть какие-нибудь идеи, как это сделать? Ссылка на файл такова:
Ответ №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. Но они недоступны. Кроме того, в чем преимущество этого по сравнению с простыми запросами,полученными с потоком?