使用水管工和R发送JSON文件时的变量名限制(10000字节)

问题描述 投票:2回答:1

我正在使用R,plumber和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)

}

是否有解决此问题的方法?或有可能解决该问题?

编辑:我稍后写了print语句来检测错误的确切位置。事实证明,在我使用fromJSON函数时,它没有到达函数的第一行。我已经编辑了功能。如果我发送一个小文件,则将执行所有操作并打印print语句,但是对于大文件,它不会显示“我在这里”。

可复制的示例:

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
r json production-environment plumber
1个回答
0
投票

对于我们来说,当我们向Plumber发送最小化的JSON时,会发生此错误。如果打印精美,我们可以轻松发送5万行,但是1行中相同的有效负载却没有间距会遇到所描述的错误。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.