[英]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,然后連接或堆疊這些組。
f = h5py.File(...)
dsets = [f[dset] for dset in datasets]
arrays = [da.from_array(dset, chunks=dset.shape) for dset in dsets]
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.arrays 的第一步
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.