【发布时间】:2021-06-09 07:23:38
【问题描述】:
将 xarray 数据集写入 AWS 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)
即使没有实际计算,to_zarr 从与 S3 存储桶位于同一区域的 EC2 中花费 大约 6 秒。
查看调试日志,似乎有相当多的重定向正在进行,因为aiobotocore 中的默认区域设置为us-east-2,而存储桶位于eu-central-1。
如果我先手动将默认区域放入环境变量中
os.environ['AWS_DEFAULT_REGION'] = 'eu-central-1'
然后所需时间下降到大约 3.5 秒。
所以我的问题是:
-
有没有办法将该区域传递给
fsspec(或s3fs)?我尝试将s3_additional_kwargs={"region":"eu-central-1"}添加到get_mapper方法中,但没有任何作用。 -
有没有比上述方法(
fsspec)更好的方式在 S3 上通过xarray与 zarr 交互?
版本:
xarray: 0.17.0
zarr: 2.6.1
fsspec: 0.8.4
【问题讨论】:
-
你可以看看github.com/pydata/xarray/issues/2300#issuecomment-805883595 "zarr and xarray chunking compatible and to_zarr performance"
-
@Josh 谢谢,但我不认为这是一个块问题
-
@Val 根据s3fs documentation,他们将
region_name显示为kwargs,以及有关使用region 的fsspec 问题。然而 zarr 在庞大的数据集上广受欢迎。不幸的是,我没有当前的工具来验证上述链接 -
@NagarajTantri 设置
client_kwargs={'region_name':'eu-central-1'}可以解决问题并回答第 1 点。如果您愿意,请发布我可以接受的答案。谢谢! -
完成,@Val。一定要检查一下。
标签: python python-xarray zarr python-s3fs