通过 s3fs 从 S3 读取文件时可以使用 xr.open_mfdataset 吗?
Can you use xr.open_mfdataset when reading files from S3 via s3fs?
我正在尝试使用 xr.open_mfdataset
从 S3 存储桶中使用 s3fs 一次读取多个 netcdf 文件。这可能吗?
尝试了以下方法,它适用于 xr.open_dataset
单个文件,但不适用于多个文件:
import s3fs
import xarray as xr
fs = s3fs.S3FileSystem(anon=False)
s3path = 's3://my-bucket/wind_data*'
store = s3fs.S3Map(root=s3path, s3=s3fs.S3FileSystem(), check=False)
data = xr.open_mfdataset(store, combine='by_coords')
我不确定 S3Map
到底是做什么的; s3fs 的文档在这方面没有具体说明。
但是,我能够使用 S3FileSystem.glob()
和 S3FileSystem.open()
在 Jupyter 环境中创建一个有效的实现
这是一个代码示例:
import s3fs
import xarray as xr
s3 = s3fs.S3FileSystem(anon=False)
# This generates a list of strings with filenames
s3path = 's3://your-bucket/your-folder/file_prefix*'
remote_files = s3.glob(s3path)
# Iterate through remote_files to create a fileset
fileset = [s3.open(file) for file in remote_files]
# This works
data = xr.open_mfdataset(fileset, combine='by_coords')
我正在尝试使用 xr.open_mfdataset
从 S3 存储桶中使用 s3fs 一次读取多个 netcdf 文件。这可能吗?
尝试了以下方法,它适用于 xr.open_dataset
单个文件,但不适用于多个文件:
import s3fs
import xarray as xr
fs = s3fs.S3FileSystem(anon=False)
s3path = 's3://my-bucket/wind_data*'
store = s3fs.S3Map(root=s3path, s3=s3fs.S3FileSystem(), check=False)
data = xr.open_mfdataset(store, combine='by_coords')
我不确定 S3Map
到底是做什么的; s3fs 的文档在这方面没有具体说明。
但是,我能够使用 S3FileSystem.glob()
和 S3FileSystem.open()
这是一个代码示例:
import s3fs
import xarray as xr
s3 = s3fs.S3FileSystem(anon=False)
# This generates a list of strings with filenames
s3path = 's3://your-bucket/your-folder/file_prefix*'
remote_files = s3.glob(s3path)
# Iterate through remote_files to create a fileset
fileset = [s3.open(file) for file in remote_files]
# This works
data = xr.open_mfdataset(fileset, combine='by_coords')