Нет такой ошибки файла при попытке создать локальный кеш объекта s3
Я пытаюсь использовать Fsspec для создания локального кеша хранилища файлов данных в сегменте публичного доступа на AWS s3. Сегмент общего доступа находится здесь.
Мне на 100% необходимо делать это в локальном файловом кеше, потому что это предназначено для масштабирования, и я не хочу физически загружать каждый отдельный файл. Я пытаюсь сделать это с помощью вызова API fsspec, который использует базовую структуру ботокора. Простой, минимально воспроизводимый пример выглядит так:
импорт fsspec
url = 'simplecache::s3://noaa-nbm-grib2-pds/blend.20211019/01/core/blend.20211019/01/core/blend.t01z.core.f001.co.grib2
'
of = fsspec.open_local(url, s3={'anon' : True}, filecache={'cache_storage':'/tmp/files'})
Выполнение вышеуказанного воспроизводит ошибку, если установлены все зависимости. Я попытался переключить URL-адрес с помощью адреса ссылки обработанного файла (схема simplecache была основана на некоторой документации fsspec здесь), но это все еще дает следующую ошибку:
ValueError: open_local can only be used on a filesystem which has attribute local_file=True
Есть ли конкретный URL-адрес, который следует использовать для чего-то вроде этого? Вот прямой URL-адрес объекта (с вставленными круглыми скобками для предотвращения ссылки для немедленной загрузки файла)
# Remove parenthesis to get full file link which is a direct file download
https://noaa-nbm-grib2-pds.s3.amazonaws.com/blend.20211019/01/core/(blend.t01z.core.f001.co.grib2)
1 ответ
Следующее работает нормально:
fsspec.open_local("simplecache::https://noaa-nbm-grib2-pds.s3.amazonaws.com/blend.20211019/01/core/blend.t01z.core.f001.co.grib2")
но прямой доступ к файлу через интерфейс s3 не удается с FileNotFound. Это, вероятно, указывает на то, что разрешения настроены неправильно, но fsspec по-прежнему ведет себя так, как вы ожидали.
>>> s3 = fsspec.filesystem("s3", anon=True)
>>> s3.info("s3://noaa-nbm-grib2-pds/blend.20211019/01/core/blend.20211019/01/core/blend.t01z.core.f001.co.grib2")
FileNotFoundError