2013-03-13 13 views
6

Wpadłem na problem z ładowaniem zestawu dokumentów JSON do PIG. To, co mam, to dużo dokumentów json, które różnią się w polach, które mają, pola, których potrzebuję, są w większości dokumentów i brakuje ich Chciałbym uzyskać wartość pustą.Ładowanie json z różnym schematem do PIG

Właśnie pobrałem i skompilowałem najnowszą wersję Pig (0.12 prosto z repozytorium gap apache) tylko po to, aby się upewnić, że jeszcze nie zostało to rozwiązane.

Co mam jest dokumentem json tak:

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

Kiedy załadować to do PIG pomocą tego

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

uzyskać oczekiwane rezultaty

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

Jednak kiedy pola są w innej kolejności w schemacie:

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

uzyskać niepożądany rezultat:

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

które powinny być

(3,2,1) 

Widocznie nazwy pól w definicji schematu nie mają nic wspólnego z fieldnames w json.

Potrzebuję załadować określone pola z pliku json (z osadzonymi dokumentami!) Do PIG.

Jak rozwiązać ten problem?

+2

Niestety JsonLoader ładuje pola w takiej kolejności, w jakiej się znajdują, niezależnie od ustawionego schematu. –

Odpowiedz

6

Wydaje mi się, że jest to znany problem z najnowszą wersją świni, więc nie ma łatwego sposobu obejścia tego, niż użycie bardziej wydajnego JsonLoadera.

Zamiast tego należy użyć Elephant Bird JSONLoader, który będzie zachowywał się tak, jak oczekujesz - innymi słowy szanować porządek w polu.

+0

Dzięki, to działa. –

Powiązane problemy