如何在R中从S3加载/保存.Rdata文件并兼容AWS Lambda?
在R中读写S3上的.Rdata文件(兼容AWS Lambda)
前提准备
- 确保
aws.s3包已安装(部署到Lambda时,需将包及其依赖打包为Lambda层或包含在部署包中) - 为Lambda执行角色配置对应S3存储桶的权限:
- 加载文件:
s3:GetObject权限 - 保存文件:
s3:PutObject权限
- 加载文件:
- Lambda中仅
/tmp目录可写,所有临时操作需在此目录进行
1. 加载S3上的.Rdata文件
通过save_object将S3文件下载到Lambda临时目录,再用load加载数据。
代码示例
library(aws.s3) # 定义目标S3路径 s3_input_path <- "s3://bucket1/rcode/data/input.Rdata" # 解析S3路径,拆分存储桶和对象键 parse_s3 <- function(path) { stripped <- sub("s3://", "", path) parts <- strsplit(stripped, "/", fixed = TRUE)[[1]] list(bucket = parts[1], key = paste(parts[-1], collapse = "/")) } path_info <- parse_s3(s3_input_path) # 下载到临时目录 temp_file <- file.path("/tmp", basename(path_info$key)) save_object(object = path_info$key, bucket = path_info$bucket, file = temp_file) # 加载数据 load(temp_file)
说明:
- Lambda会自动通过执行角色获取AWS凭证,无需手动配置凭证参数
- 加载后,
.Rdata中存储的所有对象会直接进入当前R环境
2. 将数据保存为.Rdata到S3
先把数据保存到Lambda临时目录,再通过put_object上传到指定S3路径。
代码示例
library(aws.s3) # 假设要保存的数据对象为my_data,定义目标S3路径 s3_output_path <- "s3://bucket1/rcode/data/output.Rdata" path_info <- parse_s3(s3_output_path) # 保存数据到临时文件 temp_output <- file.path("/tmp", basename(path_info$key)) save(my_data, file = temp_output) # 上传到S3 put_object(file = temp_output, object = path_info$key, bucket = path_info$bucket)
说明:
save()函数可同时保存多个对象,比如save(obj1, obj2, file = temp_output)- 上传完成后可删除临时文件(可选):
file.remove(temp_output)
内容的提问来源于stack exchange,提问作者yo wa
相关产品推荐
相关产品推荐

