我正在使用 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