1

将数据集写入xarrayAWS S3 会花费惊人的大量时间,即使实际上没有使用compute=False.

这是一个例子:

import fsspec
import xarray as xr

x = xr.tutorial.open_dataset("rasm")
target = fsspec.get_mapper("s3://bucket/target.zarr")
task = x.to_zarr(target, compute=False)

即使没有实际计算,与 S3 存储桶位于同一区域的 EC2 也to_zarr需要大约 6 秒的时间。

查看调试日志,似乎正在进行相当多的重定向,因为默认区域 inaiobotocore设置为us-east-2while bucket is in eu-central-1

如果我首先手动将默认区域放入环境变量中

os.environ['AWS_DEFAULT_REGION'] = 'eu-central-1'

然后所需时间下降到3.5 秒左右

所以我的问题是:

  1. 有没有办法将该区域传递给fsspec(或s3fs)?我已经尝试添加s3_additional_kwargs={"region":"eu-central-1"}到该get_mapper方法,但没有做任何事情。

  2. xarray有没有比上面(with )更好的方式与 S3 上的 zarr 交互fsspec


版本:

xarray: 0.17.0
zarr: 2.6.1
fsspec: 0.8.4
4

1 回答 1

2

在检查他们的文档时,对于s3fs文档,它们显示region_name为 akwargs以及有关使用该区域的 fsspec 问题

所以你可以在 中使用类似client_kwargs={'region_name':'eu-central-1'}的东西get_mapper,比如:

fsspec.get_mapper("s3://bucket/target.zarr", 
                  client_kwargs={'region_name':'eu-central-1'})

此外,zarr对于庞大的数据集也很受欢迎。

于 2021-03-26T12:48:10.653 回答