1

我试图执行以下 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。

我走对了还是有其他方法?

4

2 回答 2

1

input.string 不是保留关键字——实际上,您可以任意命名参数。假设您发布了两个参数 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) 带有一个非常有用的类来转义 JSON:StringEscapeUtils

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

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

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

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

于 2016-12-05T14:14:59.413 回答
1

从评论中复制它。

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

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

于 2016-12-05T16:05:34.363 回答