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
相关产品推荐
相关产品推荐

