2013-03-13 5 views
6

Ho riscontrato un problema durante il caricamento di un set di documenti json in PIG. Quello che ho sono molti documenti JSON che variano tutti nei campi che hanno, i campi di cui ho bisogno sono nella maggior parte dei documenti e in whare mancante mi piacerebbe avere un valore nullo.Caricamento di JSON con uno schema diverso in PIG

Ho appena scaricato e compilato l'ultima versione di Pig (0.12 direttamente dal repository git di apache) solo per essere sicuri che non sia ancora stato risolto.

Quello che ho è un documento JSON come questo:

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

Quando carico questo in PIG utilizzare questo

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

ottengo i risultati attesi

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

Tuttavia quando i campi sono in un ordine diverso nello schema:

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

ottengo un risultato indesiderato:

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

che avrebbe dovuto essere

(3,2,1) 

A quanto pare i nomi dei campi nella definizione dello schema non hanno nulla a che fare con i nomi di campo in JSON.

Quello che mi serve è caricare campi specifici da un file JSON (con documenti incorporati!) In PIG.

Come si risolve?

+2

Sfortunatamente JsonLoader carica i campi nell'ordine così come sono, indipendentemente dallo schema impostato. –

risposta

6

Penso che questo sia un problema noto anche con l'ultima versione di Pig, quindi non c'è un modo semplice per aggirare questo diverso da utilizzare un JsonLoader più capace.

Utilizzare invece il Elephant Bird JSONLoader che si comporterà come ci si aspetta, in altre parole rispettare l'ordinamento dei campi.

+0

Grazie, questo funziona. –