问题标签 [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 投票
2 回答
303 浏览

python - zarr 何时压缩块并将其推送到底层存储系统?

我正在将大型文本文件(VCF)中的数据读取到 zarr 数组中。代码的整体流程是

我想知道 - zarr 何时压缩修改后的数组块并将它们推送到底层存储(在本例中为 LMDB)?每次更新块(即每一行)时都会这样做吗?或者它是否等到一个块被填充/从内存中删除后再这样做?假设我需要在 for 循环中分别处理每一行(由于数据和处理的性质,这里没有有效的数组操作可供使用),关于我如何馈送,我应该在这里做任何优化吗数据导入Zarr?

我只是不希望 Zarr 在每一行对每个修改的块运行压缩,因为每个块在完成并准备保存到磁盘之前将被修改 1000 次。

谢谢!

0 投票
0 回答
184 浏览

python - 如何在追加期间写入锁定 zarr 存储?

使用时有什么方法可以锁定zarr商店append吗?

我已经发现append与多个进程一起使用是一个坏主意(要追加的批次与商店的批次大小不一致)。我想使用多个进程的原因是因为我需要在将原始数组附加到zarr存储之前转换它们。如果能够阻止其他进程同时写入但仍然并行执行转换,然后将它们的数据串联起来,那就太好了。

编辑:

感谢 jdehesa 的建议,我开始了解文档的同步部分。我ProcessSynchronizer在主线程中创建时将磁盘上的一个文件夹的指向传递给了我的数组,然后生成了一堆工作进程concurrent.futures并将数组传递给所有工作人员,以便他们附加他们的结果。我可以看到它ProcessSynchronizer做了一些事情,因为我指向它的文件夹充满了文件,但是我的工作人员写入的数组最终丢失了行(与从单个进程写入时相比)。

0 投票
1 回答
189 浏览

numpy - 使用 Zarr 存储 1TB 随机数据的有效方法

我想在磁盘阵列上存储由 zarr 支持的 1TB 随机数据。目前,我正在做类似以下的事情:

这需要一些时间——我知道如果我不总是生成1_000_000随机数而是重用数组,那么事情可能会得到改善,但我现在想要更多的随机性。有没有更好的方法来构建这个随机数据集?

更新 1

使用更大的 numpy 块可以加快速度:

0 投票
0 回答
418 浏览

python-xarray - Parallel appending to a zarr store via xarray.to_zarr and Dask

I am in a situation where I want to load objects, transform them into an xarray.Dataset and write that into a zarr store on s3. However, to make the loading of objects faster, I do it in parallel across distinct years using a Dask cluster, and thus, would also like to do the writing to s3 in parallel. The general structure here is:

However, doing so fails: the store gets into an inconsistent state as multiple workers are writing at the same time. I have tried using zarr.sync.ProcessSynchronizer but the issue persisted, similarly to this case: How can one write lock a zarr store during append? Any help or guidance would be appreciated.Thanks!

0 投票
1 回答
180 浏览

python - 存储“dask.array.map_blocks”输出时限制内存占用

考虑一个大到适合内存的二维数组X——在我的例子中,它以 Zarr 格式存储,但这并不重要。我想在数组上逐块映射一个函数并保存结果,而无需将整个数组加载到内存中。例如,

有没有办法限制一次评估的块数?在我的用例中,lazy_result[:,:1000].compute()适合内存,但lazy_result.compute()对于内存来说太大了。当我尝试写入 Zarr 时,内存使用量会增加,直到它达到最大值并被杀死。我可以这样做而不必导致一些不方便的事情,比如for i in range(1000): lazy_result[:,(i*1000):((i+1)*1000)].to_zarr('some_path'+str(i))

0 投票
1 回答
245 浏览

python - 将 .h5 (HDF5) 文件转换为 .zarr 格式时出现 TypeError

我正在尝试将 .h5 文件转换为 .zarr 格式,但出现以下错误

我在下面发布我的代码

我检查了 zarr 文档,一些 github 问题,但不知道如何解决这个错误。

我正在添加我已经看过但找不到(或说实话)任何东西的链接

https://zarr.readthedocs.io/en/stable/api/convenience.html#zarr.convenience.copy_all

https://github.com/zarr-developers/zarr-python/issues/87

这是错误的回溯

0 投票
1 回答
46 浏览

dask - 来自库的 Dask 循环开销

当调用另一个库来 dask 时,例如 scikit 图像对比度拉伸,我意识到 dask 正在为每个块创建一个结果,存储在内存中或单独溢出到磁盘。然后它尝试合并所有结果。如果您在集群或单台计算机上并且阵列的数据集很小,那很好,一切都得到了相当的控制。当您使用比 RAM 或磁盘大得多的数据集时,问题就会开始出现。有没有办法缓解这种情况或使用 zarr 文件格式来保存更新值?可能是太天真了。购买更多内存条的任何其他想法都会有所帮助。


编辑

我正在查看有关 dask 的文档以及有关 dask 块大小的建议,大约是 100MB。我最终从这个数量显着减少到 30-70MB,具体取决于文件大小。然后我运行了一个对比度拉伸(不是来自库,而是使用 numpy unfunc,我没有任何问题!事实上,我使用了计算完成的方式。因为我从一个 uint8 3dim 数组开始,当乘以对比度时拉伸我不可避免地将数组块增加到float64数组。这会占用大量内存和计算量。所以我所做的是将da.array视为np.asarray(float64)但仅在乘以浮点数之前. 然后返回到 uint8 完成计算。对于 20GB 的文件,拉伸时间已减少到不到 5 分钟。所以我认为这是一个积极的步骤。

我正在构建的图像处理管道将不可避免地用于大约 250-300GB 的合并数据集(绝对超出我笔记本电脑的限制)。我也没有时间掌握云或云中的并行处理。那是几个月后的事情。现在它试图通过这个分析。

0 投票
1 回答
268 浏览

pytorch - 使用带有 zarr 的 PyTorch IterableDataset 的内存泄漏问题

我正在尝试在with as 存储后端pytorch上构建一个项目。IterableDatasetzarr

这适用于小型测试数据集,但是一旦我移动到我的实际数据集(480 000 000 x 290),我就会遇到内存泄漏。我已经尝试定期注销 python 堆,因为一切都慢了下来,但我看不到任何异常增加的大小,所以我使用的库 ( pympler) 实际上并没有捕获内存泄漏。

我有点不知所措,所以如果有人知道如何进一步调试它,将不胜感激。

在PyTorch 论坛上交叉发布。

0 投票
0 回答
31 浏览

python - MariaDB 到一个 Zarr 数组,这怎么做?

MariaDB 是否可以与 Zarr 一起使用或以无损方式迁移到 Zarr,如果可以,请提供一些关于如何实现这一点的指导?

我搜索了 Zarr 文档和 MariaDB 文档,但没有找到关于这个主题的足够信息。我不想丢失或修改任何数据,我希望能够将数据解压缩或恢复到原始 MariaDB 状态。我以 4TB MariaDB (10.2) 的形式接收输出,其中包含多个不同维度的表和多种变量类型。我正在使用 python (+3.6) 并希望利用 Zarr 来对 MariaDB 中多个表中包含的数据执行探索性数据分析,同时压缩它以节省本地磁盘空间。数据的存储和数据的处理都是在本地完成的,没有使用云服务的计划。

我曾考虑使用 Python 将 MariaDB 转换为 sqlite 数据库,但由于我了解这可能会导致数据丢失/损坏,因此不再研究该路线。

谢谢你提前,布赖恩

0 投票
0 回答
121 浏览

python - 当我尝试以与切片 Numpy 数组完全相同的方式切片 Zarr 数组时,为什么会出现此错误?

我正在使用以下代码从磁盘中分割一个 Zarr 数组:

这是错误:

我不知道为什么这不起作用,我认为 Zarr 应该像 Numpy 数组一样切片?