s3.save json файл в aws s3 - PullRequest
       9

s3.save json файл в aws s3

0 голосов
/ 07 марта 2020

Я пытаюсь сохранить правильно отформатированный файл json в aws s3.

Я могу сохранить обычный фрейм данных в s3, например

library(tidyverse)
library(aws.s3)
s3save(mtcars, bucket = "s3://ourco-emr/", object = "tables/adhoc.db/mtcars/mtcars")

Но я нужно получить mtcars в формате json. В частности, nd json.

Я могу создать правильно отформатированный файл json, например:

predictions_file <- file("mtcars.json")
jsonlite::stream_out(mtcars), predictions_file)

Это сохраняет файл в моем каталоге с именем mtcars. json.

Однако с функцией aws .s3 s3save() мне нужно отправить объект, который находится в памяти, а не файл.

Попытка:

predictions_file <- file("mtcars.json")
s3write_using(mtcars, 
              FUN = jsonlite::stream_out,
              con = predictions_file,
              "s3://ourco-emr/", 
              object = "tables/adhoc.db/mtcars/mtcars")

Дает:

Ошибка в сообщении if (verbose) («открытие», (con), «выходное соединение»): аргумент не интерпретируется как логический

Я попробовал тот же блок кода, но пропустил строку для con =вести, которая только что дала:

Аргумент con должен быть соединением.

Если функция jsonlite::stream_out() создает правильно отформатированный файл json, как я могу записать этот файл в s3?

Редактировать: Требуемый вывод json будет выглядеть так:

{"mpg":21,"cyl":6,"disp":160,"hp":110,"drat":3,"wt":2,"qsec":16,"vs":0,"am":1,"gear":4,"carb":4,"year":"2020","month":"03","day":"05"}
{"mpg":21,"cyl":6,"disp":160,"hp":110,"drat":3,"wt":2,"qsec":17,"vs":0,"am":1,"gear":4,"carb":4,"year":"2020","month":"03","day":"05"}
{"mpg":22,"cyl":4,"disp":108,"hp":93,"drat":35,"wt":2,"qsec":18,"vs":1,"am":1,"gear":4,"carb":1,"year":"2020","month":"03","day":"05"}
{"mpg":21,"cyl":6,"disp":258,"hp":110,"drat":8,"wt":3,"qsec":19,"vs":1,"am":0,"gear":3,"carb":1,"year":"2020","month":"03","day":"05"}
{"mpg":18,"cyl":8,"disp":360,"hp":175,"drat":3,"wt":3,"qsec":17,"vs":0,"am":0,"gear":3,"carb":2,"year":"2020","month":"03","day":"05"}

Когда попытка чтения readchar:

mtcars_string <- readChar("mtcars.json", 1e6)
s3save(mtcars_string, bucket = "s3://ourco-emr/", object = "tables/adhoc.db/mtcars/2020/03/06/mtcars")

Если я затем скачаю и открою получившийся файл json, он будет выглядеть так:

5244 5833 0a58 0a00 0000 0300 0306 0000
0305 0000 0000 0555 5446 2d38 0000 0402
0000 0001 0004 0009 0000 000d 6d74 6361
7273 5f73 7472 696e 6700 0000 1000 0000
0100 0400 0900 0012 347b 226d 7067 223a
3231 2c22 6379 6c22 3a36 2c22 6469 7370

Так выглядит ke a tsb было отправлено на aws s3 вместо json

...