2012-02-16 8 views
5

Po załadowaniu i zgrupowaniu rekordów, w jaki sposób mogę zapisać te zgrupowane rekordy w kilku plikach, po jednym w grupie (= identyfikator użytkownika)?Jak przechowywać zgrupowane rekordy w wielu plikach za pomocą Pig?

records = LOAD 'input' AS (userid:int, ...); 
grouped_records = GROUP records BY userid; 

Używam Apache Pig wersji 0.8.1-cdh3u3 (rexported)

+0

Hmm wydaje MultiStorage w Piggybank może być co szukam http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/ (?) java/src/main/java/org/apache/pig/piggybank/storage/MultiStorage.java? view = markup – thomers

Odpowiedz

4
A = LOAD 'mydata' USING PigStorage() as (a, b, c); 
STORE A INTO '/my/home/output' USING MultiStorage('/my/home/output','0', 'bz2', '\\t'); 

parametry:

  1. parentPathStr - nadrzędna ścieżka wyjściowa reż
  2. splitFieldIndex - kluczowy wskaźnik pola
  3. kompresji - 'bz2', 'bz', 'gz' lub 'none'
  4. fieldDel - Ogranicznik pola rekordu wyjściowego.

referencyjny: GrepCode

8

Rzeczywiście, istnieje klasa MultiStorage na Piggybank który robi dokładnie to, co chcę - to dzieli rekordy w określonym atrybucie (w indeksie '0' w moim przykładzie):

STORE records INTO 'output' USING org.apache.pig.piggybank.storage.MultiStorage('output', '0', 'none', ','); 
+0

Czy wiesz, jak to zrobić, ale zamiast określać format kompresji, chcę przechowywać moje pliki w RC Format? – Emtiaz

+0

Przepraszam Emtiaz, nie wiem. – thomers