仅保留数据源的一部分

Persisting only part of a data source

我正在使用 intake 访问目录 catalog.ocean.GFDL_CM2_6.GFDL_CM2_6_control_ocean_surface。 目前我只处理该数据的小补丁,但每次访问该数据仍然非常昂贵(它在 Google 云存储上)。所以我想使用 intake 的 persist 选项在本地存储该数据。但是据我从文档中了解到的,看起来只能保留整个数据集。对于该特定数据集,如果我采用每 GB 0.1 美元的成本,则总计将近 400 美元,因为总数据为 3976GB。

因此我的问题是:

  1. 有没有办法(尤其是对于 zarr 文件,理论上应该很容易)只保留部分数据(例如,只保留变量的子集)
  2. 这可能更复杂,但我可以通过持久化我感兴趣的数据区域(例如,就坐标值而言)来进一步推动事情吗?

没有直接的 Intake 方式可以满足您的要求。 Intake 被认为是一种将数据转换成一种格式的方法,您可以像往常一样操作该格式,即仅处理加载部分,以便持久化数据集与原始数据集相同。

然而,手动完成并不难:您应该获取 xarray,过滤您需要的区域,然后调用 to_zarr 保存新数据集。然后,您可以将一个简单的目录条目指向新位置,就像旧条目一样。

如果这是一个会重复很多次的特定模式,您可以直接在驱动程序中完成此操作。事实上,我们已经提出 whether/how 的想法,在 Intake 中实现这样的处理步骤,但目前还没有计划。最后,我们可以拿Holoviews中pipelines的工作来描述处理步骤。