我已经从多个源 hdf5 文件构建了一个巨大的 dask 数组。
假设数据仅来自一个 hdf5 文件:
import dask.array as da
import h5py
import xarray as xr
h5_data = h5py.File(path_to_file, "r")
dask_arr = da.from_array(h5_data, chunks=chunksize)
然后我将该 dask 数组中的(惰性)切片排列到 xarray 数据集中
xr_data = xr.DataArray(dask_arr[0:1000])
# Note: In reality, xr_data and dask[0:1000] aggregation is much more complex and needs quite long to process
现在我想序列化 xr_data 对象,这样我就不需要每次都计算它。
xarray DataArray 中的数据通过 dask 延迟映射到 hdf5 文件。 如何序列化(pickle?netcdf?...)以便能够在“惰性映射”持续存在时重新加载 xarray 对象?
谢谢你们!
最佳答案
一般来说,您应该能够做到这一点。 Dask 和 Xarray 对象都是可picklable的。这会将图形序列化为字节,然后您可以将其写入文件中。
但是,在您的特定情况下,该图包含 h5py.Dataset 对象,不幸的是这些对象不可序列化。
xarray open_dataset
方法通过多种方式解决了这个问题。如果您可以将它们与各种 concat
调用一起使用,那么我认为这可能是您最好的选择,而不是直接使用 h5py.Dataset
对象。
关于python - 是否可以序列化包含指向文件的惰性 dask 数组数据的 xarray DataArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59378903/