将具有不同模式的json加载到PIG中

时间:2013-03-13 21:11:13

标签: json schema apache-pig

我遇到了将一组json文档加载到PIG中的问题。 我所拥有的是很多json文档,它们在所有字段中都有所不同,我需要的字段在大多数文档中,并且在whare中我想要获得null值。

我刚刚下载并编译了最新的Pig版本(从apache git存储库直接0.12),以确保尚未解决。

我所拥有的是这样的json文档:

{"foo":1,"bar":2,"baz":3}

当我使用此

将其加载到PIG中时
Json1 = LOAD 'test.json' USING JsonLoader('foo:int,bar:int,baz:int');
DESCRIBE Json1;
DUMP Json1;

我得到了预期的结果

Json1: {foo: int,bar: int,baz: int}
(1,2,3)

但是,当架构中的字段顺序不同时:

Json2 = LOAD 'test.json' USING JsonLoader('baz:int,bar:int,foo:int');
DESCRIBE Json2;
DUMP Json2;

我得到了一个不受欢迎的结果:

Json2: {baz: int,bar: int,foo: int}
(1,2,3)

应该是

(3,2,1)

显然,架构定义中的字段名称与json中的字段名无关。

我需要的是将json文件(包含嵌入文档!)中的特定字段加载到PIG中。

如何解决此问题?

1 个答案:

答案 0 :(得分:6)

我认为即使是最新版本的Pig,这也是一个已知问题,所以除了使用功能更强大的JsonLoader外,没有其他方法可以解决这个问题。

使用Elephant Bird JSONLoader而不是您期望的行为 - 换言之,尊重字段排序。