在 Spark 作业服务器中。如何在 input.string 上传递 json 格式的字符串?

In Spark JobServer. How to pass a json formated string on the input.string?

我正在尝试对 运行 个作业执行以下 curl 命令:

curl -k --basic --user 'user:psw' -d 'input.string= {"user":13}' 'https://localhost:8090/jobs?appName=test&classPath=test.ImportCSVFiles&context=import&sync=true'

但我收到以下错误:

 "com.typesafe.config.ConfigException$WrongType: String: 1: input.string has type OBJECT rather than STRING"

我的想法是像 sql 查询一样传递多个参数。 json 格式,便于处理我提交的 jar。

我的方法是对的还是有别的方法?

input.string 不是保留关键字——实际上,您可以任意命名参数。比方说,你 POST 两个参数 foo.string 和 foo.number。然后您读取 SJS 作业中的参数,如下所示:

 // run is the starting point of a SJS job (also see validate function)
 override def runJob(sc: SparkContext, config: Config): Any = {
  val cmd = config.getString("input.cmd") 
  val fooString = config.getString("foo.bar")
  val fooNum    = config.getInt("foo.number")

以防万一您计划从 Scala/Java:

执行 SJS 作业

Apache Commons Lang (org.apache.commons.lang3) 附带了一个非常有用的 class 转义 JSON:StringEscapeUtils

我用它来转义我需要传递给 SparkJobServer 作业的 Scala 应用程序的输入,如下所示:

input.schema=\"" + StringEscapeUtils.escapeJson(referenceSchema)+"\""

referenceSchema 是一个 JSON 文档(在我的例子中是一个 JSON 数组)

input.schema 是来自 Scala 的 HTTP post 正文中许多逗号分隔的参数之一...

正在从评论中复制。

问题是 json 因为字符串以大括号“{”开头,所以试图直接将其作为对象而不是字符串来读取。

输入正确'input.string= \"{\"user\":13}\" '