Чтение и запись в файл в Amazon S3 Bucket - PullRequest
2 голосов
/ 12 июня 2019

Мне нужно прочитать большой (> 15 МБ) файл (скажем, sample.csv) из корзины Amazon S3.Затем мне нужно обработать данные, представленные в sample.csv, и продолжать записывать их в другой каталог в корзине S3.Я намерен использовать функцию AWS Lambda для запуска моего Java-кода.

В качестве первого шага я разработал Java-код, который работает в моей локальной системе.Java-код читает файл sample.csv из корзины S3, и я использовал метод 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. 

Но только 3,nhoj,XX,c#,expert написано в Testout.csv.

1 Ответ

3 голосов
/ 12 июня 2019

Метод putObject() создает объект Amazon S3.

Невозможно добавить или изменить объект S3, поэтому каждый раз при выполнении цикла while создается новый объект Amazon S3..

Вместо этого я бы порекомендовал:

  • Загрузить исходный файл из Amazon S3 на локальный диск (используйте GetObject() с destinationFile для загрузка на диск)
  • Обработка файла и вывод в локальный файл
  • Загрузка выходного файла в Amazon S3ведро ( метод )

Это отделяет код AWS от кода обработки, который должно быть проще в обслуживании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...