如何使用Xarray读取lambda中的S3文件?

2024-04-19 01:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图读取放置在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' 

Tags: 文件ins3linedsnetcdffilenamefile
1条回答
网友
1楼 · 发布于 2024-04-19 01:28:22

据我所知,Xarray不直接支持S3。您可以改用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!'
    }

相关问题 更多 >