从gcs上已被阻止的数据中定义一个dask数组

问题描述 投票:0回答:1

我想从我已经分块的数据中创建一个3D dask数组。我的数据由216个块组成,每个块包含1024x1024x1024 uint8体素,每个体均存储为压缩的hdf5文件,并带有一个称为数据的键。压缩后,我的数据每块只有几兆字节,但是解压缩后,每块需要1GB数据。此外,我的数据目前存储在Google云端存储(gcs)中,尽管我可以将其本地镜像到容器中。

我认为最简单的方法是按照以下说明(https://pangeo.io/data.html)使用zarr。 xarray在保存为zarr格式之前是否必须解压缩我的数据?是否需要重新整理数据并尝试跨块通信?是否有从hdf5块组装zarr的较低级别的方法?

dask
1个回答
0
投票

这里有几个问题,所以我将尽量简短,希望一些编辑可以充实我可能省略的细节。

您不需要做任何事情就可以将数据作为单个dask数组查看,因为您可以将单个块作为数组引用(请参阅here),然后使用堆栈/连接函数将其构建为单个数组。但这确实意味着要打开客户端中的每个文件,以便读取肉类数据。

类似地,xarray具有一些读取文件集的功能,在这里您应该能够假定dtype和维度的一致性-请参阅其文档。

就zarr而言,您可以使用dask在GCS上为您创建文件集,也可以不使用,并选择使用与输入相同的分块方案-这样就不会进行改组。由于zarr的设置和理解非常简单,因此您甚至可以自己创建zarr数据集并一一写入块,而不必从zarr文件中预先创建dask数组。通常,这将通过zarr API进行,并且写入大量数据不需要对元数据文件进行任何更改,因此可以并行完成。从理论上讲,如果您了解底层数据表示形式(例如,C数组布局中的int64),则可以简单地复制一个块;但是,我不知道在原始hdf和zarr中都可以使用完全相同的压缩机制的可能性有多大(请参阅here)。

© www.soinside.com 2019 - 2024. All rights reserved.