簡體   English   中英

Dask/hdf5:按組閱讀?

[英]Dask/hdf5: Read by group?

我必須讀入並獨立操作大型數據幀/numpy 數組的許多塊。 但是,這些塊是以特定的、非統一的方式選擇的,並自然地分成 hdf5 文件中的組。 每個組都足夠小以適應內存(盡管即使沒有限制,我認為標准的分塊程序應該足夠了。)

具體來說,而不是

 f = h5py.File('myfile.hdf5')
 x = da.from_array(f['/data'], chunks=(1000, 1000))

我想要更接近(偽代碼)的東西:

 f = h5py.File('myfile.hdf5')
 x = da.from_array(f, chunks=(f['/data1'], f['/data2'], ...,))

http://dask.pydata.org/en/latest/delayed-collections.html我相信暗示這是可能的,但我仍在閱讀和理解 dask/hdf5。

我之前的實現使用了許多 CSV 文件,並根據需要使用自己的多處理邏輯讀取它們。 我想使用 hdf5 將所有這些功能折疊到 dask 中。

是否可以通過 hdf5 group/read 進行分塊,我的思路還可以嗎?

我會從許多組中讀取許多 dask.arrays 作為單塊 dask.arrays,然后連接或堆疊這些組。

閱讀許多 dask.arrays

f = h5py.File(...)
dsets = [f[dset] for dset in datasets]
arrays = [da.from_array(dset, chunks=dset.shape) for dset in dsets]

或者,使用鎖來保護 HDF5

HDF5 不是線程安全的,所以讓我們使用鎖來保護它免受並行讀取的影響。 在跨不同組閱讀時,我實際上並沒有檢查是否有必要這樣做。

from threading import Lock
lock = Lock()

arrays = [da.from_array(dset, chunks=dset.shape, lock=lock) 
           for dset in dsets]

將數組堆疊或連接在一起

array = da.concatenate(arrays, axis=0)

http://dask.pydata.org/en/latest/array-stack.html

或者使用 dask.delayed

您也可以按照您的建議使用dask.delayed執行讀取單塊 dask.arrays 的第一步

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM