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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2021-09-09
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多