【问题标题】:how to read S3 files in lambda using Xarray?如何使用 Xarray 在 lambda 中读取 S3 文件?
【发布时间】:2020-10-23 15:46:36
【问题描述】:

我正在尝试读取放置在我的 S3 存储桶中的 netCDF 文件,我正在使用 Xarray 来读取这些文件。下面的示例代码运行良好,如果我的本地文件夹中有相同的文件,例如 ~/downloads/60e0489fcab82c714f516064b4e6b7acf724b7b9.nc,但我是 S3 的新手,不确定我缺少什么。

我正在尝试通过 Xarray 读取 netCDF 并将其转换为 csv。 Boto3 不适用于读取 netCDF4 并将其转换为 CSV。

下面是我的 lambda 函数:-

import xarray

def handler(event, context):
    
    filename = 's3://netcdf-files/60e0489fcab82c714f516064b4e6b7acf724b7b9.nc'
    ds= xarray.open_dataset(filename)
    for varname in ds:
        print(varname)

    tas0=ds['wet_bulb_potential_temperature']
    tas0

    return {
        'statusCode': 200,
        'message': 'Hello from Python Lambda Function!'
    }

我遇到以下错误,我的 S3 文件路径未检测到,而是它的 Lambda 正在尝试在本地路径中查找文件。 来自云观察日志的错误消息:

File "/opt/python/lib/python3.6/site-packages/xarray/backends/file_manager.py", line 204, in _acquire_with_cache_info
    file = self._opener(*self._args, **kwargs)
  File "netCDF4/_netCDF4.pyx", line 2321, in netCDF4._netCDF4.Dataset.__init__
  File "netCDF4/_netCDF4.pyx", line 1885, in netCDF4._netCDF4._ensure_nc_success

FileNotFoundError: [Errno 2] No such file or directory: b'/var/task/s3:/netcdf-files/60e0489fcab82c714f516064b4e6b7acf724b7b9.nc' 

【问题讨论】:

标签: python amazon-s3 aws-lambda netcdf python-xarray


【解决方案1】:

编辑 2021

从 v0.16.2 开始,使用通用 fsspec URL 支持 S3 存储桶: http://xarray.pydata.org/en/stable/user-guide/io.html#cloud-storage-buckets


旧答案

如果您需要使用旧版本,可以使用s3fs 代替:

import xarray
import s3fs

def handler(event, context):
    
    fs = s3fs.S3FileSystem(anon=True) # or anon=False to use default credentials

    with fs.open('netcdf-files/60e0489fcab82c714f516064b4e6b7acf724b7b9.nc', 'rb') as f:
        ds= xarray.open_dataset(filename)
        for varname in ds:
            print(varname)

    tas0=ds['wet_bulb_potential_temperature']
    tas0

    return {
        'statusCode': 200,
        'message': 'Hello from Python Lambda Function!'
    }

【讨论】:

  • 我可能错了,但我认为“支持从 v0.16.2 开始的 S3 存储桶”这句话仅适用于加载 Zarr 数据集,而不适用于加载 NetCDF 文件。
猜你喜欢
  • 2021-05-19
  • 2019-03-18
  • 2020-04-10
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
相关资源
最近更新 更多