python - 是否可以序列化包含指向文件的惰性 dask 数组数据的 xarray DataArray?

标签 python serialization deserialization dask python-xarray

我已经从多个源 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/

相关文章:

python - 如何在 virtualenv 的子目录中使用 pipelinev 创建新的 virtualenv?

基于元组第一个值的python求和元组列表

c# - 将Json反序列化为对象异常

DjangoRestFramework - 将 "required = false"添加到 ModelSerializer 字段的正确方法?

nested - 预期实例,获得 OrderedDict Django Rest Framework 可写嵌套序列化器

java - jackson 真的无法将 json 反序列化为泛型类型吗?

python - 为迭代器的每个元素创建一个包含 2 个条目的列表

python - 如何在 Anaconda 中安装 Matplotlib 3.4.1?

java - 将 Vector<String> 序列化为 String

c# - 如何序列化包含System.Threading.Thread的对象?