我正在使用R、plumber和Docker编写生产级代码来创建一个API。我的API的输入是一个JSON文件,输出也是JSON格式。当我的输入文件超过一定的空间/内存限制时,我会遇到问题。我该如何处理这些问题呢?
这是我得到的错误:
<simpleError in do.call(fi$exec, req$args): variable names are limited to 10000 bytes>
有什么方法可以避免这个错误?我如何以块的形式输入,以便修复空间限制?另外,为什么它要将其存储为变量名?
如果输入JSON文件的大小足够小,则api的输入可以正常工作。(大约46KB,甚至更多)。但对于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)
}
有没有办法解决这个问题?或者有可能解决这个问题?
编辑:我稍后编写了print语句,以检测错误的确切位置。结果发现它没有到达我使用fromJSON函数的函数的第一行。我现在已经编辑好了这个函数。如果我发送一个小文件,所有的东西都会被执行并打印print语句,但是对于一个大文件,它不会打印"I'm here“。
可重现的例子:
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
发布于 2019-10-28 22:57:02
对于我们来说,当我们将最小化的JSON发送给Plumber时,就会出现这个错误。如果打印得很好,我们可以很容易地发送50,000行,但是在没有空格的1行上相同的有效负载会遇到所描述的错误。
当然,最小化的JSON是机器对机器通信的最佳实践,因此这似乎是一个框架级别的bug1。嘿,至少有一个变通的办法!
https://stackoverflow.com/questions/54311392
复制相似问题