首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用plumber和R发送JSON文件时的变量名限制(10000字节)

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

Stack Overflow用户
提问于 2019-01-22 23:22:10
回答 1查看 468关注 0票数 2

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

这是我得到的错误:

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
#' @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“。

可重现的例子:

代码语言:javascript
运行
复制
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文件

代码语言:javascript
运行
复制
 #' @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文件

代码语言:javascript
运行
复制
pr <- plumber::plumb("createAPI.R")
pr$run(port=8000, host="0.0.0.0")

从终端;转到文件夹并运行

代码语言:javascript
运行
复制
curl --data-binary "@input_api_json.json" -X POST http://localhost:8000/model
EN

回答 1

Stack Overflow用户

发布于 2019-10-28 22:57:02

对于我们来说,当我们将最小化的JSON发送给Plumber时,就会出现这个错误。如果打印得很好,我们可以很容易地发送50,000行,但是在没有空格的1行上相同的有效负载会遇到所描述的错误。

当然,最小化的JSON是机器对机器通信的最佳实践,因此这似乎是一个框架级别的bug1。嘿,至少有一个变通的办法!

1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54311392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档