如何解决Zarr:提高对 S3 的 xarray 写入性能
将 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
也需要大约 6 秒从与 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
方法,但没有任何作用。
版本:
xarray
解决方法
在检查他们的文档时,对于 s3fs documentation,他们将 region_name
显示为 kwargs
以及有关使用 region 的 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
因庞大的数据集而广受欢迎。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。