2013-03-13 49 views
6

我遇到了将一组json文件加载到PIG中的问题。 我所拥有的是很多json文档,它们在各自的字段中都有所不同,我需要的字段在大多数文档中,在缺少whare时我希望得到空值。将不同架构的json加载到PIG中

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

我所拥有的就是这样一个JSON文件:

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

当我使用这个

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) 

然而,当这个装入PIG字段在架构中的顺序不同:

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中。

我该如何解决这个问题?

+2

不幸的是,无论您设置的架构如何,JsonLoader按照原样加载字段。 – 2013-03-14 10:07:40

回答

6

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

改为使用Elephant Bird JSONLoader,它将按照您的预期行事 - 换句话说,就是字段顺序。

+0

谢谢,这个工程。 – 2013-03-14 10:45:28