我有以下格式的json文件:
{ "_id" : "foo.com", "categories" : [], "h1" : { "bar==" : { "first" : 1281916800, "last" : 1316995200 }, "foo==" : { "first" : 1281916800, "last" : 1316995200 } }, "name2" : [ "foobarl.com", "foobar2.com" ], "rep" : null }
那么,我如何在猪身上解析这个json ..
另外,类别和代表可以在其中包含一些字符......并且可能并不总是为空。 我做了以下尝试。
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; line:1,column:50] at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291) at 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) at 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) at org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue(MapTask.java:532) at 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)
答案 0 :(得分:3)
您可以使用大象鸟猪罐解析json。它可以解析所有类型的json数据。 以下是使用此jar通过大象鸟猪解析json的某些示例。 https://github.com/twitter/elephant-bird/tree/master/examples/src/main/pig
即使没有预期的json标记,它也不会中断。