2013-03-13 71 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