Ограничения имени переменной (10000 байт) при использовании сантехника и R для отправки файлов JSON - PullRequest
0 голосов
/ 22 января 2019

Я пишу код производственного уровня, используя 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
...