在猪中解析复杂的json?

Posted

技术标签:

【中文标题】在猪中解析复杂的json?【英文标题】:Parsing complex json in pig? 【发布时间】: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)

【问题讨论】:

【参考方案1】:

您可以使用大象鸟猪罐来解析json。它可以解析各种 json 数据。 以下是使用此 jar 通过大象鸟猪解析 json 的某些示例。 https://github.com/twitter/elephant-bird/tree/master/examples/src/main/pig

即使预期的 json 标记不存在,它也不会中断。

【讨论】:

以上是关于在猪中解析复杂的json?的主要内容,如果未能解决你的问题,请参考以下文章

在猪中使用 AvroStorage()

在猪中增加映射器

在猪中正确加载日期时间

在猪中找到原子的长度

多列组合在猪中唯一

无法在猪中处理 Xml