2013-03-13 4 views
6

Ich stieß auf ein Problem beim Laden eines Satzes JSON Dokumente in PIG. Was ich habe, ist eine Menge von Json Dokumente, die alle in den Bereichen variieren, die sie haben, die Felder, die ich brauche, sind in den meisten Dokumenten und in denen ich vermisse, möchte ich einen Nullwert erhalten.Laden von JSON mit variierendem Schema in PIG

Ich habe gerade die neueste Pig-Version heruntergeladen und kompiliert (0.12 direkt aus dem Apache-Git-Repository), nur um sicher zu gehen, dass dies noch nicht gelöst ist.

Was ich habe, ist ein json Dokument wie folgt aus:

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

Wenn ich dies in PIG laden diese mit

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

ich die erwarteten Ergebnisse

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

jedoch erhalten, wenn Die Felder sind im Schema in einer anderen Reihenfolge angeordnet:

ich ein unerwünschtes Ergebnis:

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

Die

hätte sein sollen
(3,2,1) 

Anscheinend ist die Feldnamen in der Schema-Definition haben nichts mit den Feldnamen in der json zu tun.

Was ich brauche, ist das Laden bestimmter Felder aus einer JSON-Datei (mit eingebetteten Dokumenten!) In PIG.

Wie kann ich das beheben?

+2

Leider lädt JsonLoader die Felder in der Reihenfolge, wie sie sind, unabhängig von dem Schema, das Sie festlegen. –

Antwort

6

Ich denke, das ist ein bekanntes Problem mit sogar der neuesten Version von Pig, also gibt es keinen einfachen Weg um dies anders als einen leistungsfähigeren JsonLoader zu verwenden.

Verwenden Sie stattdessen die Elephant Bird JSONLoader, die sich so verhält, wie Sie es erwarten - mit anderen Worten, die Reihenfolge der Felder respektieren.

+0

Danke, das funktioniert. –