簡體   English   中英

讀取和寫入Amazon s3存儲桶中的文件

[英]Read and write to a file in Amazon s3 bucket

我需要從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

putObject()方法創建一個Amazon S3對象。

無法附加或修改S3對象,因此每次執行while循環時,它都會創建一個新的Amazon S3對象。

相反,我建議:

  • 將源文件從Amazon S3 下載到本地磁盤(將GetObject()destinationFile一起使用以下載到磁盤)
  • 處理文件並輸出到本地文件
  • 將輸出文件上傳到Amazon S3存儲桶( 方法

這會將AWS代碼與您的處理代碼分開,這應該更易於維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM