【问题标题】:Zarr multithreaded reading of groupsZarr 多线程读取组
【发布时间】:2019-06-26 21:24:37
【问题描述】:

不确定这个问题是否有意义/是否相关 wrt zarr。我将 zarr 数据分组存储在磁盘上,例如我有

group = zarr.group()
d1 = group.create_dataset('baz', shape=100, chunks=10)
d2 = group.create_dataset('foo', shape=100, chunks=10)

现在组是可迭代的,因此我可以对其进行迭代并从所有组中读取数据:

all_data = [group[g][:] for g in group]

有没有办法使用多线程从组中读取所有数据以加快速度?我知道在数组中您可以使用多线程来读取和写入数据。

假设按组读取数据对我来说太慢了,我应该将所有组放入一个数据数组容器中吗?我想我想知道除了组织容器之外,组的功能是什么。因为假设每个组包含相似的数据,理论上您可以将另一个轴添加到您的 numpy 数组(对于组)并将所有组存储在一个大数组中。

【问题讨论】:

    标签: python multithreading hdf zarr


    【解决方案1】:

    组主要用作组织容器。一个组可以包含任意数量的数组,其中每个数组可能具有不同的形状和/或数据类型,因此它们是组织数据的一种灵活方式。如果您的数组都是相同的形状和数据类型,那么您可以按照您的建议将它们全部堆叠成一个多维数组。但是,如果数据总量相同,我不认为读取速度会有很大差异,无论您是一组中的多个数组还是单个数组中的所有数据。

    如果你想将一个组中的所有数组读入内存,并且你正在使用默认的压缩器(Blosc),那么这将在解压缩过程中使用多个线程。 Blosc 通常在利用可用内核方面做得很好,因此如果添加任何进一步的多线程,您可能无法提高很多。

    【讨论】:

      猜你喜欢
      • 2013-04-24
      • 2015-06-16
      • 1970-01-01
      • 2014-07-14
      • 2019-06-02
      • 2017-11-27
      • 2012-11-05
      • 1970-01-01
      相关资源
      最近更新 更多