【问题标题】:Read and write to a file in Amazon s3 bucket读取和写入 Amazon s3 存储桶中的文件
【发布时间】:2019-10-26 15:06:45
【问题描述】:

我需要从 Amazon S3 存储桶中读取一个大 (>15mb) 文件(例如 sample.csv)。然后,我需要处理 sample.csv 中存在的数据,并继续将其写入 S3 存储桶中的另一个目录。我打算使用 AWS Lambda 函数来运行我的 java 代码。

作为第一步,我开发了在本地系统上运行的 java 代码。 Java 代码从 S3 存储桶中读取 sample.csv 文件,我使用 put 方法将数据写回 S3 存储桶。但是我发现只有最后一行被处理并放回去了。

Region clientRegion = Region.Myregion;    
AwsBasicCredentials awsCreds = AwsBasicCredentials.create("myAccessId","mySecretKey");    
S3Client s3Client = S3Client.builder().region(clientRegion).credentialsProvider(StaticCredentialsProvider.create(awsCreds)).build();    
ResponseInputStream<GetObjectResponse> s3objectResponse = s3Client.getObject(GetObjectRequest.builder().bucket(bucketName).key("Input/sample.csv").build());    
BufferedReader reader = new BufferedReader(new InputStreamReader(s3objectResponse));    
String line = null;
while ((line = reader.readLine()) != null) {
                s3Client.putObject(PutObjectRequest.builder().bucket(bucketName).key("Test/Testout.csv").build(),RequestBody.fromString(line));
}

示例:sample.csv 包含

1,sam,21,java,beginner;
2,tom,28,python,practitioner;
3,john,35,c#,expert.

我的输出应该是

1,mas,XX,java,beginner;
2,mot,XX,python,practitioner;
3,nhoj,XX,c#,expert. 

Testout.csv中只写了3,nhoj,XX,c#,expert

【问题讨论】:

    标签: java amazon-web-services amazon-s3 aws-lambda aws-sdk


    【解决方案1】:

    putObject() 方法创建一个 Amazon S3 对象。

    无法附加或修改 S3 对象,因此每次执行 while 循环时,都会创建一个新的 Amazon S3 对象。

    相反,我会推荐:

    • 下载源文件从 Amazon S3 到本地磁盘(使用 GetObject()destinationFiledownload 到磁盘)
    • 处理文件并输出到本地文件
    • 上传输出文件到 Amazon S3 存储桶 (method)

    这将 AWS 代码与您的处理代码分开,这应该更易于维护。

    【讨论】:

    • 将文件读入内存/缓冲区,然后在 lambda 中动态处理它,然后将修改/操作的数据写回 s3。如上所述,putObject 仅将最后一行写入 s3。
    • 如果本地文件位于 AWS Elasticbeanstalk -TomCat 容器上,这是否与此相同?
    • @DuracellDeMonaco 请创建一个新问题,而不是通过对旧问题的评论来提问。
    • 如上所述,您不能附加或修改 S3 对象。一种选择是使用 AWS Storage Gateway。 aws.amazon.com/about-aws/whats-new/2016/11/…
    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 2012-10-23
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2022-01-24
    • 2021-05-14
    相关资源
    最近更新 更多