Ошибка драйвера при чтении файловой базы геоданных из S3 с использованием геопанд
Я пытаюсь прочитать файл файловой базы геоданных в фрейм геоданных с помощью библиотеки pythongeopandas. Файл базы геоданных находится на S3, поэтому я использую
fssspec
чтобы прочитать это, но я получаю сообщение об ошибке:
import geopandas as gpd
import fsspec
fs = fsspec.filesystem('s3', profile='my-profile', anon=False)
он работает для чтения в файле geojson:
# this runs w/o error
g_file = fs.open("my-bucket/my-file.geojson")
gdf = gpd.read_file(g_file)
это вызывает ошибку:
gbd_file = fs.open("my-bucket/my-file.gdb/")
gdf = gpd.read_file(gdb_file, driver="FileGDB")
Вот трассировка ошибки:
---------------------------------------------------------------------------
CPLE_OpenFailedError Traceback (most recent call last)
fiona/_shim.pyx in fiona._shim.gdal_open_vector()
fiona/_err.pyx in fiona._err.exc_wrap_pointer()
CPLE_OpenFailedError: '/vsimem/83f6a4d8051c449c86c4c608520eb998' not recognized as a supported file format.
During handling of the above exception, another exception occurred:
DriverError Traceback (most recent call last)
<ipython-input-33-7245da312526> in <module>
----> 1 gdf = gpd.read_file(file, driver='FileGDB')
~/my-conda-envs/nwm/lib/python3.7/site-packages/geopandas/io/file.py in _read_file(filename, bbox, mask, rows, **kwargs)
158
159 with fiona_env():
--> 160 with reader(path_or_bytes, **kwargs) as features:
161
162 # In a future Fiona release the crs attribute of features will
~/my-conda-envs/nwm/lib/python3.7/site-packages/fiona/collection.py in __init__(self, bytesbuf, **kwds)
554 # Instantiate the parent class.
555 super(BytesCollection, self).__init__(self.virtual_file, vsi=filetype,
--> 556 encoding='utf-8', **kwds)
557
558 def close(self):
~/my-conda-envs/nwm/lib/python3.7/site-packages/fiona/collection.py in __init__(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ignore_fields, ignore_geometry, **kwargs)
160 if self.mode == 'r':
161 self.session = Session()
--> 162 self.session.start(self, **kwargs)
163 elif self.mode in ('a', 'w'):
164 self.session = WritingSession()
fiona/ogrext.pyx in fiona.ogrext.Session.start()
fiona/_shim.pyx in fiona._shim.gdal_open_vector()
DriverError: '/vsimem/83f6a4d8051c449c86c4c608520eb998' not recognized as a supported file format.
Еще одна потенциальная подсказка: я могу заставить его работать, просто выполнив:
gdf = gpd.read_file("s3://my-bucket/my-file.gdb/", driver="FileGDB")
НО только на машине, которая является частью политики доступа к корзине. Я хочу получить доступ к данным с любого компьютера, используя учетные данные AWS, хранящиеся в
my-profile
профиль.
К сожалению, я не могу предоставить способ воспроизвести ошибку, поскольку все делаю в облаке. Работает нормально локально ...
1 ответ
Мы наблюдаем аналогичные проблемы с использованием ключей только для чтения для расположений и шейп-файлов S3 (и, возможно, даже папок NAS с разрешениями только для чтения).
Можете ли вы попробовать как с ключами, имеющими разрешения на чтение и запись, так и с ключами только для чтения? Я предполагаю, что драйверы gdal на задней панели нуждаются в разрешениях на запись / доступе, даже если требуется только чтение.
На проблему с драйвером намекают в последней части трассировки ошибки.
fiona/_shim.pyx in fiona._shim.gdal_open_vector()
DriverError: ...
Если есть кто-нибудь, кто может подтвердить особенности разрешений, необходимых для драйверов gdal, это было бы здорово!