Даск в hdf5 записать не удается, "h5py не замаривается" - PullRequest
1 голос
/ 03 августа 2020

Ниже приведена часть, в которой возникает ошибка:

procDask = da.stack(procArrays)
print(procDask)
print(procDask.compute())    
    
#da.to_hdf5('out.hdf5',{'/arr',procDask})
    
f = h5py.File('out.hdf5',mode='w')
d = f.require_dataset('/a', shape=procDask.shape, dtype=procDask.dtype)
da.store(procDask, d)

мой procDask показывает

dask.array<stack, shape=(3, 3, 3), dtype=int16, chunksize=(1, 3, 3), chunktype=numpy.ndarray>

Однако с использованием любого из вышеупомянутых методов записи (как прокомментированный и раскомментированный), дает мне следующую ошибку:

TypeError: h5py objects cannot be pickled

Это немного более подробно, показывает исходный код et c, но я полагаю, что это основная ошибка. Я неправильно использую методы?

EDIT: Вот код, который может воспроизвести ошибку


def main():
    procArray = da.ones((3,3,3))
    procArray.to_hdf5('testout.hdf5','/arr')
    client.shutdown()

if __name__ == "__main__":
    client = Client()
    main()

1 Ответ

1 голос
/ 08 августа 2020

Верно, объекты H5Py нельзя мариновать, а значит, нельзя использовать в распределенной настройке. Я рекомендую использовать метод to_hdf5, чтобы обойти это. Он обрабатывает уловки, необходимые для того, чтобы все работало хорошо.

...