Я пишу код производственного уровня, используя R, сантехник и Docker для создания API.Входные данные для моего API - это файл JSON, а выходные данные также в формате JSON.Я сталкиваюсь с проблемами, когда мой входной файл превышает определенный предел пространства / памяти.Как мне справиться с такими проблемами?
Это ошибка, которую я получаю:
<simpleError in do.call(fi$exec, req$args): variable names are limited to 10000 bytes>
Как можно обойти эту ошибку?Как я могу вводить порциями, чтобы он фиксировал ограничение пространства?Кроме того, почему он хранится в качестве имени переменной?
Вход в API работает, если размер входного файла JSON достаточно мал.(около 46 КБ, может быть, даже больше).Но происходит сбой для файла 1,3 МБ
Версия сантехника = 0,4,6
Версия R = 3,5,2
#' @param req Posts in JSON format
#' @post /model
function(req){
print("I'm here")
df <- jsonlite::fromJSON(req$postBody)
op <- do_something(df)
return(op)
}
Есть ли способ обойти это?Или, возможно, решить проблему?
РЕДАКТИРОВАТЬ: я написал оператор печати позже, чтобы определить, где именно лежит ошибка.Оказывается, он не достигает первой строки функции, где я использую функцию fromJSON.Я редактировал функцию сейчас.Если я отправляю небольшой файл, все выполняется и печатается оператор печати, но для большого файла он не печатает «Я здесь».
Воспроизводимый пример:
temp <- read.csv("https://s3.amazonaws.com/nyc-tlc/trip+data/green_tripdata_2018-01.csv")
input_api_json <- toJSON(temp)
write(input_api_json, file = "input_api_json.json")
Затем создайте файл createAPI.R
#' @param req Posts in JSON format
#' @post /model
function(req){
print("I'm here")
df <- jsonlite::fromJSON(req$postBody)
op <- df[1,]
return(op)
}
Затем создайте файл runAPI.R
pr <- plumber::plumb("createAPI.R")
pr$run(port=8000, host="0.0.0.0")
Из терминала;перейдите в папку и запустите
curl --data-binary "@input_api_json.json" -X POST http://localhost:8000/model