Как открыть несколько файлов NetCDF с помощью xarray через OpenDAP?

Я пытаюсь открыть несколько файлов NetCDF, размещенных на OpenDAP, на сервере THREDDS, используя xarray.open_mfdataset(), но получаю сообщение об ошибке. Если я открываю только один файл (но все еще с open_mfdataset()), он работает, если я открываю два - нет.

Например, это прекрасно работает:

import xarray as xr
chunks = {'time' : 1, 'depth' : 1}
paths  = [
    'http://thredds.met.no/thredds/dodsC/fou-hi/norkyst800m-1h/NorKyst-800m_ZDEPTHS_his.an.2017022000.nc',
    ]
d = xr.open_mfdataset(paths, chunks = chunks)

в то время как это не так:

import xarray as xr
chunks = {'time' : 1, 'depth' : 1}
paths  = [
    'http://thredds.met.no/thredds/dodsC/fou-hi/norkyst800m-1h/NorKyst-800m_ZDEPTHS_his.an.2017022000.nc',
    'http://thredds.met.no/thredds/dodsC/fou-hi/norkyst800m-1h/NorKyst-800m_ZDEPTHS_his.an.2017022100.nc',
    ]
d = xr.open_mfdataset(paths, chunks = chunks)

Я запускаю это в ноутбуке jupyter, и я не получаю никаких результатов в ноутбуке, он просто продолжает работать, а в терминале он печатает следующее

CURL Error: Failed initialization
curl error details:
CURL Error: Failed initialization
CURL Error: Failed initialization
CURL Error: Failed initialization
syntax error, unexpected WORD_WORD, expecting SCAN_ATTR or SCAN_DATASET or SCAN_ERROR
context: !�zF^@L������@L�Ы�J�@L�y@L�G`Lp@L�X�ڭ@L�/��a@L���@L��{�:@@L�Hl�D@L���i@L�f���@L�>����@L�x��f@L��DA�h@L�����@L��ڭ�M@L�u���@M
CURL Error: Failed initialization
curl error details:
CURL Error: Failed initialization
CURL Error: Failed initialization
syntax error, unexpected WORD_WORD, expecting $end
context: Dataset { Structure { Float64 lon[Y = 902][X = 2602]; } lon;} fou-hi/norkyst800m-1h/NorKyst-800m_ZDEPTHS_his.an.2017022100.nc;Data^:
CURL Error: Failed initialization
CURL Error: Failed initialization
CURL Error: Failed initialization
syntax error, unexpected WORD_WORD, expecting SCAN_ATTR or SCAN_DATASET or SCAN_ERROR
context: �@��&��D^@�h�N�{@��I$�@B�

и с этого момента он просто вырождается в печать большего количества мусора.

Разве это не должно работать нормально?

Редактировать:

Раньше я не знал об этом, но оказалось, что библиотека netCDF4 также поддерживает открытие нескольких путей как одного набора данных. Я не уверен, актуально ли это, поскольку я не знаю, используют ли xarray и netCDF4 одни и те же бэкенды, но в любом случае следующее работает нормально. По крайней мере, это говорит о том, что проблема не на стороне сервера.

import netCDF4 as nc
d = nc.MFDataset([
    'http://thredds.met.no/thredds/dodsC/fou-hi/norkyst800m-1h/NorKyst-800m_ZDEPTHS_his.an.2017022000.nc',
    'http://thredds.met.no/thredds/dodsC/fou-hi/norkyst800m-1h/NorKyst-800m_ZDEPTHS_his.an.2017022100.nc',
])

person Tor    schedule 07.03.2017    source источник


Ответы (1)


Мне это кажется какой-то ошибкой - вы правильно используете API, и нет никаких причин, по которым это не должно работать. Но я не знаю, какая система неисправна - скорее всего, это либо считыватель OpenDAP netCDF-C, либо удаленный сервер OpenDAP.

person shoyer    schedule 07.03.2017
comment
Я не знал об этом до публикации, но я только что обнаружил, что в библиотеке netCDF4 для python есть функция с именем MFDataset(). Открытие тех же двух путей с этим отлично работает (я отредактирую свой вопрос, чтобы включить эту информацию). - person Tor; 07.03.2017
comment
Трудно иметь диалог для отладки чего-либо в StackOverflow. Не могли бы вы вместо этого открыть проблему на странице xarray github? - person shoyer; 08.03.2017
comment
Абсолютно. Спасибо. - person Tor; 08.03.2017