2017-03-29 19 views
1

SparkでJSONデータを解析するためにJSONライブラリツールを使用していて、次のエラーメッセージが表示されました。誰もがこのエラーの原因について考えていますか?これが悪いJSONレコードに起因する場合は、どのようにして不良レコードを特定できますか?ありがとう!ここでjsonの解析時に入力の終了によりマップする内容がありません

は、私はJSONデータを解析するために使用される主要なスクリプトです:

import play.api.libs.json._ 
val jsonData = distdata.map(line => Json.parse(line)) //line 194 of script parseJson_v14.scala 
val filteredData = jsonData.map(json => (json \ "QueryStringParameters" \ "pr").asOpt[String].orNull).countByValue() 

変数distdataは、テキスト形式のJSONデータのRDDで、変数jsonDataはJsValueデータのRDDです。 Sparkの変換は怠惰なので、2番目のコマンドを実行してfiltered filteredDataを作成するまでエラーは飛び出さず、エラーメッセージに従って、変数jsonDataを作成する最初のコマンドからエラーが発生します。

[2017-03-29 14:55:39.616]-[Logging$class.logWarning]-[WARN]: Lost task 42.0 in stage 1.0 (TID 90, 10.119.126.114): com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: ; line: 1, column: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3110) at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3024) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1652) at play.api.libs.json.jackson.JacksonJson$.parseJsValue(JacksonJson.scala:226) at play.api.libs.json.Json$.parse(Json.scala:21) at parseJson_v14$$anonfun$1$$anonfun$3$$anonfun$apply$1.apply(parseJson_v14.scala:194) at parseJson_v14$$anonfun$1$$anonfun$3$$anonfun$apply$1.apply(parseJson_v14.scala:194) at scala.collection.Iterator$$anon$11.next(Iterator.scala:328) at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:389) at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327) at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327) at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13$$anonfun$apply$6.apply$mcV$sp(PairRDDFunctions.scala:1197) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13$$anonfun$apply$6.apply(PairRDDFunctions.scala:1197) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13$$anonfun$apply$6.apply(PairRDDFunctions.scala:1197) at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1250) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1205) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1185) at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) at org.apache.spark.scheduler.Task.run(Task.scala:89) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)
+2

に 'ちょうどあなたすることはできませんprintln''Json.parse(line) 'を呼び出す前に' line'が解析されていますか? – marcospereira

+0

あなたはパースを囲むTryを置くことができます。または、問題がどこにあるのかを手動で確認するのに十分な入力が得られるまで入力ファイルを減らすことができます – pedrorijo91

答えて

1

{"id":"121", "name":"robot 1"} 
{"id":"122", "name":"robot 2"} 

反対のようなあなたがdistdataに空白行を持っていない場合、あなたは1行ですべてのJSONオブジェクトを持っていることを確認し、

{"id":"121", "name": 
"robot 1"} 
{"id":"122", "name": 
"robot 2"} 
関連する問題