当前位置: 首页 > 知识库问答 >
问题:

在pig中解析复杂的json?

韩博厚
2023-03-14

我有以下格式的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中可以有一些char。。可能并不总是空的。我做了以下尝试。

a = load 'sample_json.json' using JsonLoader('id:chararray,categories:[chararray], hostt:{ (variable_a: {(first:int,last:int)})}, ns:[chararray],rep:chararray  ');

但我得到这个错误:

组织。科德豪斯。杰克逊。JsonParseException:意外字符('D'(代码68)):在[源代码:java.io]处应为有效值(数字、字符串、数组、对象、“true”、“false”或“null”)。ByteArrayInputStream@4795b8e9; 第1行,第50列]位于组织。科德豪斯。杰克逊。JsonParser_org上的constructError(JsonParser.java:1291)。科德豪斯。杰克逊。实施。JsonParserMinimalBase_org上的reportError(JsonParserMinimalBase.java:385)。科德豪斯。杰克逊。实施。JsonParserMinimalBase_org上的reportUnexpectedChar(JsonParserMinimalBase.java:306)。科德豪斯。杰克逊。实施。Utf8StreamParser_位于org的handleUnexpectedValue(Utf8StreamParser.java:1582)。科德豪斯。杰克逊。实施。Utf8StreamParser。位于org的nextToken(Utf8StreamParser.java:386)。阿帕奇。猪内置。JsonLoader。org上的readField(JsonLoader.java:173)。阿帕奇。猪内置。JsonLoader。位于org的getNext(JsonLoader.java:157)。阿帕奇。猪后端。hadoop。executionengine。mapReduceLayer。PigRecordReader。org上的nextKeyValue(PigRecordReader.java:211)。阿帕奇。hadoop。映射。MapTask$NewTrackingRecordReader。位于org的nextKeyValue(MapTask.java:532)。阿帕奇。hadoop。mapreduce。MapContext。org上的nextKeyValue(MapContext.java:67)。阿帕奇。hadoop。mapreduce。映射器。在org上运行(Mapper.java:143)。阿帕奇。hadoop。映射。MapTask。在org上运行NewMapper(MapTask.java:764)。阿帕奇。hadoop。映射。MapTask。在org上运行(MapTask.java:370)。阿帕奇。hadoop。映射。LocalJobRunner$作业。运行(LocalJobRunner.java:212)

共有1个答案

平和雅
2023-03-14

您可以使用elephant bird pig jar来解析json。它可以解析所有类型的json数据。下面是使用这个jar通过大象鸟pig解析json的一些示例。https://github.com/twitter/elephant-bird/tree/master/examples/src/main/pig

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

 类似资料:
  • 问题内容: 我在s3中有很多gzip日志文件,其中有3种类型的日志行:b,c,i。我和c都是单层json: 类型b是深度嵌套的json。我碰到这个要点,谈论要编译一个罐子来完成这项工作。由于我的Java技能还不算出色,因此我真的不知道该怎么做。 由于类型i和c并不总是相同的顺序,因此很难在生成正则表达式中指定所有内容。Pig是否可以处理JSON(在gzip文件中)?我正在使用在Amazon Ela

  • 我有一个非常复杂的字符串,如下所示, 这里所有的JSON数据都在括号“[]”中,括号之间用“{…}”分隔支撑。在这里,我想要一个从所有花括号的消息,故事和属性。尝试了两件事一是二把所有的东西都放在一个JSON对象中,也尝试了一次无用的尝试来匹配regex“message:”但即使这样也没用。 从所有大括号中查找消息、故事和属性的方法是什么。

  • 问题内容: 是否可以对JSON对象执行复杂的查询?我愿意接受JavaScript或jQuery解决方案,越轻松越好。我正在构想某种类似于LINQ或SQL的功能编程语言。 我不希望其他任何第三方库或附加组件。 更新 从早期答案的外观来看,将需要一个附加组件。在这种情况下,我更喜欢不需要安装过程的加载项。随软件发布一起部署的东西(如jQuery)很好(例如* .js文件集)。 问题答案: 签出:是否有

  • 问题内容: 我有一个很长的JSON与Gson一起解析,但是为了简洁起见,我将其修剪为以下示例: 从SO和其他几个地方,我发现我需要定义一个顶级容器,例如下面的容器,但我不知道如何完成其​​定义 然后每堂课 我正在尝试解析它,这是到目前为止我编写的代码: JSON字符串存储在名为response的变量中 我的最终要求是of,并且关联。 问题答案: 第一个问题 :您的需求是: 它不必是静态的。 第二个

  • 问题内容: 我是Java编程的新手,需要通过网络解析一个复杂的JSON对象。过去一天,我一直在阅读有关GSON的文档,但能够完全解析这种类型的结构并没有太大的运气: 我已经能够使它与该问题类似地工作,但是无法弄清楚如何使该附加数组级别起作用。 问题答案: 使用GSON的正确格式是我正在寻找的格式: