2016-12-04 52 views
1

我試着去執行下面的curl命令來運行作業:在Spark JobServer中。如何在input.string上傳遞一個json格式的字符串?

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上處理。

我在正確的路上還是有另一種方式?

+0

我不知道你想達到什麼,但例外是相當清楚的。 {「user」:13}是一個json對象,「input.string」想要除了一個字符串值。所以發送它作爲字符串轉義報價,如果有必要,並在內部將該字符串轉換爲json –

+0

@AbhishekAnand這就是我也試過,但如果我使用'「input.string = {\」user \「:13}」'我得到結果和使用''input.string = \ {\「user \」:13 \}「'然後_Reserved字符'\\'不允許在quotes_之外。從我的角度來看_ {「user」:13} _是一個字符串,它具有json格式?是的,但它是一個字符串。 – Jose

+0

你試過'input.string = \「{\」user \「:13} \」' –

回答

1

從評論複製它。

問題是json試圖讀取它不是作爲字符串,而是作爲對象直接由於字符串以大括號「{」開頭。

正確輸入'input.string= \"{\"user\":13}\" '

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") 

萬一你打算從斯卡拉/ Java的執行SJS工作:

阿帕奇共享郎(org.apache.commons.lang3)配備了一個非常有用的類逃脫JSON:StringEscapeUtils

我用它來逃避我的斯卡拉申請輸入,我需要傳遞給SparkJobServer工作,像這樣:

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

referenceSchema是JSON文檔(在我的情況下的JSON陣列)

input.schema然後在從Scala的HTTP信息的正文許多逗號分隔的參數之一...

相關問題