2017-09-14 6 views
0
case class Response(jobCompleted:String,detailedMessage:String) 

override def runJob(sc: HiveContext, runtime: JobEnvironment, data: 
JobData): JobOutput = { 
    val generateResponse= new GenerateResponse(data,sc) 
    val response=generateResponse.generateResponse() 
    response.pettyPrint 
} 

私はこの形式のsparkジョブサーバーから自分のscalaコードからouputを取得しようとしています。sparkジョブサーバーが正しい形式のjsonを返さない

{"{\"jobCompleted\":\"true\",\"detailedMessage.."}.は、いくつかのいずれかが、私は間違っているとどのように正しい形式を得ることになっているものを指摘してくださいすることができ:私に戻りますしかし何

" result":{ 
    "jobCompleted":true, 
    "detailedMessage":"all good" 
    } 

には、以下の結果です。私もAST形式を返すresponse.toJsonを試しました

"result": [{ 
    "jobCompleted": ["true"], 
    "detailedMessage": ["all good"] 
    }], 
+0

出力を取得しているコードを確認できますか?または、ケースクラスをどのように使用しているか説明しますか? –

答えて

0

私はついにこれを理解しました。このフローオーバー質問に基づいています。ここに私がスケーラとジョブサーバーを始動させるために新しくなったので、より良い方法が親切に投稿されていれば。

Convert DataFrame to RDD[Map] in Scala

ので、キーは地図[文字列、JsValue]への応答を変換することです。以下は、私が演奏していたサンプルコードです。

case class Response(param1:String,param2:String,param3:List[SubResult]) 
case class SubResult(lst:List[String]) 
object ResultFormat extends DefaultJsonProtocol{ 
implicit val subresultformat=jsonFormat1(SubResult) 
implicit val responsefomat=jsonFormat3(Response) 
} 

type JobOutput=Map[String,JsValue] 
def runJob(....){ 

val xlst=List("one","two") 
val ylst=List("three","four") 
val subresult1=SubResult(xlst) 
val subresult2=SubResult(ylst) 
val subResultlist=List(subresult1,subresult2) 
val r=Result("xxxx","yyy",subResultlist) 
r.toJson.asJsObject.fields 
//Returns output type of Map[String,JsValue] which the spark job server serializes correctly. 
} 
関連する問題