Как избежать ошибки «Ошибка записи запроса драйвера» при записи большого количества данных в файл h5? - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь записать большой объем данных в набор данных h5, используя следующий набор строк:

fpath = '/run/user/1002/gvfs/smb-share:server=path.to.server,share=Project/data.h5'
hf = h5py.File(fpath,'w')
hf.create_dataset('a', data=a)
dset = hf.create_dataset('b',(nrow,1),maxshape=(nrow,None),chunks=(nrow,1))
for i in range(ncol):
    dset[:,-1:] = b
    if i+1 < ncol:
        dset.resize(dset.shape[1]+1,axis=1)
hf.close()

Файл в расположении fpath находится в общей папке и доступен по протоколу SMB через Samba. Здесь a и b - это массивы (dtype=float) фигур (nrow,) и (nrow,ncol), где nrow = ~15000 и ncol = ~50000. Когда я запускаю свой код, я получаю следующую ошибку:

OSError: Ошибка записи драйвера (запись файла не удалась: время = среда 1 мая 14:43:22 2019, имя файла = «/Run/user/1002/gvfs/smb-share:server=path.to.server, share = Project / data.h5 ', дескриптор файла = 11, errno = 95, ошибка message = 'Операция не поддерживается', buf = 0x482ff88, общая запись размер = 124500, байты этой подзаписи = 124500, байты на самом деле записано = 18446744073709551615, смещение = 10879697965)

Если я печатаю счетчик цикла print(i), я вижу, что цикл достиг конца, поэтому ошибка могла появиться в строке hf.close().

Я думаю разбить файлы на несколько небольших файлов. Есть ли другой способ обойти эту ошибку?

Дополнительная информация:

Operating system           Ubuntu 16.04.5 LTS
Python                     v 3.5.2
h5py                       v 2.9.0
HDF5 (h5cc -showconfig)    v 1.8.16     
sys.maxsize                9223372036854775807

UPDATE: Я заменил операцию resize над набором данных, сначала сохранив полные данные в массивном массиве, а затем записав все массивы в набор данных за один вызов create_dataset. Позже я столкнулся с другой проблемой, связанной с размером массива numpy, и мне пришлось уменьшить ncol вдвое и записать данные в два этапа.

Было бы хорошо, если бы ошибка могла быть устранена для итеративного изменения размера набора данных.

...