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

Nie*_*jes 6 schema json apache-pig

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

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

我有一个像这样的json文档:

{"foo":1,"bar":2,"baz":3}
Run Code Online (Sandbox Code Playgroud)

当我使用它将其加载到PIG中时

Json1 = LOAD 'test.json' USING JsonLoader('foo:int,bar:int,baz:int');
DESCRIBE Json1;
DUMP Json1;
Run Code Online (Sandbox Code Playgroud)

我得到了预期的结果

Json1: {foo: int,bar: int,baz: int}
(1,2,3)
Run Code Online (Sandbox Code Playgroud)

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

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

我得到了一个不希望的结果:

Json2: {baz: int,bar: int,foo: int}
(1,2,3)
Run Code Online (Sandbox Code Playgroud)

应该是的

(3,2,1)
Run Code Online (Sandbox Code Playgroud)

显然,模式定义中的字段名称与json中的字段名无关.

我需要的是从json文件(带有嵌入文档!)加载到PIG中的特定字段.

我该如何解决这个问题?

see*_*ead 6

我认为这是一个已知的问题,即使是最新版本的Pig,所以除了使用功能更强大的JsonLoader之外,还有一个简单的方法.

使用Elephant Bird JSONLoader,它将按照您期望的方式运行 - 换言之,尊重字段排序.