问题标签 [zarr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
344 浏览

python - Zarr 多线程读取组

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

现在 group 是可迭代的,所以我可以迭代它并从所有组中读取数据:

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

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

0 投票
1 回答
444 浏览

python-3.x - zarr.consolidate_metadata 产生错误:“memoryview”对象没有属性“decode”

我有一个现有的 LMDB zarr 存档(~6GB)保存在path. 现在我想整合元数据以提高读取性能。

这是我的脚本:

我收到以下错误:

我正在使用zarr 2.3.2python 3.5.2。我有另一台机器正在运行python 3.6.2。它可能与python版本有关吗?

0 投票
1 回答
595 浏览

python - 具有未知形状的 Dask 数组

我正在尝试将 dask 数组存储在 zarr 文件中。

当 dask 数组具有定义的形状时,我已经设法做到了。

但是,如果我对 dask 数组执行了任何操作,形状就会丢失,并且 zarr 会抱怨形状中的 Nans。

这是引发的错误:

有没有办法将没有已知形状的 dask 数组存储到 zarr 文件中?

提前致谢!

0 投票
1 回答
31 浏览

python - 显示所有变体

我有一个 2GB 的 vcf DNA 文件,我正在尝试使用 vcf_to_zarr() 打印出具有所有固定字段的所有变体,但我收到错误 KeyError: 'variants/*'

allel.vcf_to_zarr

0 投票
2 回答
1528 浏览

dask - 将新的 Xarray DataArray 添加到现有的 Zarr 存储而不重写整个数据集?

如何在不覆盖整个内容的情况下DataArray向现有内容添加新内容?DatasetDataArray的与现有的共享一些坐标,但也有新的坐标。在我当前的实现中,Dataset被完全覆盖,而不是仅仅添加新的东西。

现有的DataArray是一个分块的 zarr 支持DirectoryStore(尽管我对 S3 商店有同样的问题)。

ds看起来像这样:

我将其写入目录存储:

这看起来不错的样子:

我创建了一个DataArray与现有坐标共享一些坐标的新坐标,并将其添加到现有坐标中Dataset。我会Dataset先阅读现有的,因为这就是我在实践中所做的。

更新Dataset后看起来不错:

...但是如果没有完全覆盖,我就无法写入它。

这给了我一个ValueError: The only supported options for mode are 'w' and 'w-'.

这给了我ValueError: path 'arr' contains a group.

唯一有效的是z2 = ds2.to_zarr(store, group='arr', mode='w'),但这完全覆盖了该组。

原文DataArray在我的问题中其实相当大,所以我真的不想重写它。 有没有办法只写新的DataArray

谢谢!

0 投票
0 回答
403 浏览

zarr - 如何减少/删除 zarr 数组

我在 zarr 中有一个简单的对象数组(比如长度 1000)。我想用一个精简的版本替换它,只选择项目的一个子集,使用大小为 1000 的布尔数组指定。我想保持其他所有内容相同(例如,如果这个数组是持久的,我想更改磁盘和内存中的阵列)。我不能简单地重新分配数组:

my_zarr_data = my_zarr_data[:][selected_items]

因为那时我得到了错误ValueError: missing object_codec for object array。另一种选择是制作一个副本,删除所有数据,然后使用 将其从原始数据添加回来append(),但我看不到如何在保持 object_codec 和其他参数相同的同时清除zarr 数组(也许我可以这样做resize(0)?)。目前我正在调整长度,sum(selected_items)然后使用my_zarr_data.set_basic_selection(..., my_zarr_data[:][selected_items]). 那正确吗?有没有一种更有效的方法可以将数组永久重新分配给(比如说)返回值get_mask_selection()

0 投票
1 回答
455 浏览

dask - 异步 Xarray 写入 Zarr

全部。我正在使用 Dask 分布式集群在循环内编写 Zarr+Dask 支持的 Xarray 数据集,并且dataset.to_zarr正在阻塞。当有散乱的块阻塞循环的继续时,这确实会减慢速度。有没有办法.to_zarr异步执行,以便循环可以继续下一个数据集写入,而不会被一些散乱的块阻碍?

0 投票
2 回答
284 浏览

image - 来自 zarr 文件的 dask 直方图(一个大 zarr 文件)

所以这是我的问题,我有一个大小为 100GB 的大 3dim 数组作为 #zarr 文件(该数组的大小超过两倍)。我曾尝试使用#Dask 中的直方图进行计算,但我收到一条错误消息,指出它无法执行此操作,因为该文件在元组中包含元组。我猜那是 zarr 文件格式而不是其他任何东西?

有什么想法吗?

编辑:是的,更大的计算机实际上无法工作......

我在一台机器上运行一个 dask 客户端,它运行计算但只是卡在某个地方。

我只是在文件中尝试了 dask.map 函数,但是当我将它绘制出来时,我得到了这样的结果:

这是脚本的一个版本:

我实际上会尝试在地图功能之外使用它。我想知道,而不是地图功能,地图块的窗口实际上会导致问题。好吧,我会告诉你是现在还是现在......

编辑 2

所以我尝试按照建议删除地图块功能,这是我的结果:

我打算在另一个笔记本上尝试,看看它是否仍然存在。

编辑 3

这是奇怪的事情,但如果我只是声明变量 h,它会作为 dask 数组中的一个小元素出现吗?

编辑

奇怪,如果我调用 xarray.hist 或 da.hist 函数,它们都会倒下。如果我使用 skimage.exposure.histogram 它可以工作,但似乎 zarr 文件在计算直方图之前已解压缩。这有点问题...

2020 年 6 月 7 日更新(针对不大但令人讨厌的中等数据的解决方案)请参阅下面的答案。

0 投票
2 回答
576 浏览

python - 如何利用 GPU 将大型 dask 数组(numpy.ndarray)写入 Zarr 文件?

我正在尝试使用 dask. 如果我的 dask 数组被命名dask_data,那么一个简单的dask_data.to_zarr("my_zarr.zarr")就可以了。但据我了解,这是一个同步的、受 CPU 限制的过程。

我想做的是使用并行处理分配给 Quadro GV100 GPU 的大部分工作。我试图通过将 numpy.ndarray 转换为 cupy.ndarraydask_data_cupy = dask_data.map_blocks(cupy.asarray)并将其写入 zarr 文件,但我收到:(

ValueError: object __array__ method not producing an array坦率地说,我也没有看到性能提升)。

我如何使用 GPU 将 dask 数组并行写入 zarr 文件?

谢谢!

0 投票
2 回答
1151 浏览

python - 如何使用 dask 和 xarray 加载和处理 zarr 文件

我在 s3 中有每月 zarr 文件,其中包含网格温度数据。我想为一个纬度/经度提取多个月的数据并创建该时间序列的数据框。一些伪代码:

所以这段代码可以工作,但速度非常慢。我希望使用 dask 来加快速度。我的计划是更改一次处理一个文件并返回数据帧的方法。然后我会调用 client.map() 并生成所有 dfs,然后在最后将它们连接在一起。所以我结束了与此类似的事情:

当我将客户端连接到本地计算机时,此代码运行良好。但是当我尝试连接到远程集群时,我在 xr.open_zarr 调用中收到以下错误:

KeyError:'XXX/data.zarr/.zmetadata'

我尝试更改代码并在方法调用之外加载 zarrs 并将它们传入,但结果只给了我 nans。有什么我想念的吗?这不是解决我想要做的事情的正确方法吗?