2

我正在使用 R、管道工和 Docker 编写生产级代码来创建 API。我的 API 的输入是 JSON 文件,输出也是 JSON 格式。当我的输入文件超过某个空间/内存限制时,我遇到了问题。我该如何处理这些问题?

这是我得到的错误:

<simpleError in do.call(fi$exec, req$args): variable names are limited to 10000 bytes>

有什么方法可以解决这个错误?如何输入块以修复空间限制?另外为什么将其存储为变量名?

如果输入 JSON 文件的大小足够小,则 api 的输入有效。(大约 46 KB,甚至更多)。但对于 1.3 MB 文件失败

水管工版本 = 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
4

1 回答 1

1

对我们来说,当我们将最小化的 JSON 发送到 Plumber 时会发生此错误。如果打印得很漂亮,我们可以轻松发送 50000 行,但是在 1 行上没有空格的相同有效负载会遇到所描述的错误。

当然,最小化的 JSON 是机器对机器通信的最佳实践,因此这似乎是一个框架级别的错误 [1]。嘿,至少有一个解决方法!

[1] https://github.com/rstudio/plumber/issues/463

于 2019-10-28T14:57:01.880 回答