You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda中将POJO列表写入Snappy Parquet并上传至S3的路径疑问

在AWS Lambda中将POJO列表写入Snappy Parquet并上传S3的解决方案

Lambda提供了可读写的临时文件系统,路径为/tmp,你可以直接将Parquet文件写入这个目录,之后再上传到S3。

1. 写入Parquet文件到Lambda临时目录

直接构造Path对象指向/tmp下的目标文件,使用ParquetWriter完成写入。示例代码(Java):

import org.apache.parquet.hadoop.ParquetWriter;
import org.apache.parquet.hadoop.api.WriteSupport;
import org.apache.parquet.hadoop.metadata.CompressionCodecName;
import org.apache.parquet.avro.AvroWriteSupport;
import java.nio.file.Path;

// 假设你的POJO类是YourPOJO
WriteSupport<YourPOJO> writeSupport = new AvroWriteSupport<>(YourPOJO.getClass());
ParquetWriter<YourPOJO> writer = ParquetWriter.builder(new Path("/tmp/result.parquet"), writeSupport)
        .withCompressionCodec(CompressionCodecName.SNAPPY)
        .build();

// 遍历POJO列表写入
for (YourPOJO item : yourPojoList) {
    writer.write(item);
}
writer.close();

2. 将临时文件上传到S3

使用AWS SDK(以Java的S3Client为例)将/tmp下的文件上传至目标S3存储桶:

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import java.nio.file.Paths;

// Lambda环境会自动加载IAM角色权限,无需额外配置凭证
S3Client s3Client = S3Client.create();

// 构造上传请求
PutObjectRequest putRequest = PutObjectRequest.builder()
        .bucket("your-target-bucket")
        .key("prefix/result.parquet") // S3中的目标文件路径
        .build();

// 执行上传
s3Client.putObject(putRequest, Paths.get("/tmp/result.parquet"));

关键注意事项

  • 临时目录空间限制:Lambda默认/tmp目录大小为512MB,若Parquet文件超过此大小,需在Lambda函数配置的「配置」->「常规配置」中调整临时存储容量(最大支持10GB)。
  • 文件清理:Lambda执行环境可能被复用,建议上传完成后手动删除/tmp下的临时文件,避免残留占用空间:
    Files.deleteIfExists(Paths.get("/tmp/result.parquet"));
    
  • IAM权限:确保Lambda的执行角色拥有s3:PutObject权限,允许将文件写入目标S3桶。

内容的提问来源于stack exchange,提问作者Jeremy Fisher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:33:27