【发布时间】:2013-08-30 02:44:04
【问题描述】:
我有以下格式的 json 文件:
{ "_id" : "foo.com", "categories" : [], "h1" : { "bar==" : { "first" : 1281916800, "last" : 1316995200 }, "foo==" : { "first" : 1281916800, "last" : 1316995200 } }, "name2" : [ "foobarl.com", "foobar2.com" ], "rep" : null }
那么,我如何在 pig 中解析这个 json..
此外,categories 和 rep 中可以包含一些字符..并且可能并不总是为空。 我做了以下尝试。
a = load 'sample_json.json' using JsonLoader('id:chararray,categories:[chararray], hostt:{ (variable_a: {(first:int,last:int)})}, ns:[chararray],rep:chararray ');
但我得到这个错误:
org.codehaus.jackson.JsonParseException:意外字符('D'(代码 68)):需要一个有效值(数字、字符串、数组、对象、'true'、'false' 或 'null') 在 [来源:java.io.ByteArrayInputStream@4795b8e9;行:1,列:50] 在 org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291) 在 org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385) 在 org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:306) 在 org.codehaus.jackson.impl.Utf8StreamParser._handleUnexpectedValue(Utf8StreamParser.java:1582) 在 org.codehaus.jackson.impl.Utf8StreamParser.nextToken(Utf8StreamParser.java:386) 在 org.apache.pig.builtin.JsonLoader.readField(JsonLoader.java:173) 在 org.apache.pig.builtin.JsonLoader.getNext(JsonLoader.java:157) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.nextKeyValue(PigRecordReader.java:211) 在 org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:532) 在 org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67) 在 org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143) 在 org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:370) 在 org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
【问题讨论】:
标签: json apache-pig