如何在Pig中解析JSON?

时间:2011-02-16 05:59:01

标签: json apache-pig

我在s3中有很多gzip的日志文件,它们有3种类型的日志行:b,c,i。我和c都是单级json:

{"this":"that","test":"4"}

类型b是深层嵌套的json。我偶然发现这个gist正在讨论编译一个罐子来使这个工作。由于我的java技能不是很好,我真的不知道该怎么做。

{"this":{"foo":"bar","baz":{"test":"me"},"total":"5"}}

由于类型i和c并不总是以相同的顺序,这使得生成正则表达式中的所有内容变得困难。使用Pig可以处理JSON(在gzip文件中)吗?我正在使用任何版本的Pig来自Amazon Elastic Map Reduce实例。

这归结为两个问题: 1)我可以用猪解析JSON(如果是,如何)? 2)如果我可以解析JSON(来自gzip的日志文件),我可以解析嵌套的JSON对象吗?

6 个答案:

答案 0 :(得分:16)

Pig 0.10内置Json Storage和JsonLoader()。

pig doc for json load/store

答案 1 :(得分:8)

经过大量的变通办法和完成工作后,我能够回答这个问题。我在博客上写了一篇关于如何做到这一点的文章。它可以在这里找到:http://eric.lubow.org/2011/hadoop/pig-queries-parsing-json-on-amazons-elastic-map-reduce-using-s3-data/

答案 2 :(得分:5)

Pig附带一个JSON加载器。 要加载你使用:

  

A = LOAD'data.json'
      使用PigJsonLoader();

要存储,您可以使用:

STORE INTO ‘output.json’ 
    USING PigJsonLoader();

但是,我不确定它是否支持GZIPed数据......

答案 3 :(得分:3)

答案 4 :(得分:2)

我们可以通过使用JsonLoader来实现...但我们必须提到您的json数据的架构,否则可能会出现错误..请按照以下链接

         http://joshualande.com/read-write-json-apache-pig/

我们也可以通过创建UDF来解析它...

答案 5 :(得分:0)

我已经看到twitter elephantbird的使用量增加了很多,它很快就成为了PIG中json解析的goto库。

示例:

DEFINE TwitterJsonLoader com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true ');

JsonInput = LOAD 'input_path' USING TwitterJsonLoader() AS (entity: map[]);

InputObjects = FOREACH JsonInput GENERATE (map[]) entity#'Object' AS   JsonObject;

InputIds = FOREACH InputObjects GENERATE JsonObject#'id' AS id;