2016-03-23 11 views
-2

Ich versuche, eine Datei in PIG zu laden, die 2 Wörter mit Leerzeichen oder Tabs getrennt werden können (kann mir mehr als eins). Gibt es eine Möglichkeit, die Dateiladung mit einer Regex für Leerzeichen zu begrenzen? Oder gibt es einen anderen Weg, um das Folgende zu erreichen?Lade Datei in Schwein auf Whitespace

Eingang:

COUNTESS This young gentlewoman had a father,--O, that` 

Ausgang:

COUNTESS 
This 
young 
gentlewoman 
had 
a 
father,--O, 
that 

Es wäre toll, auch ein Komma als Trennzeichen zu haben, aber das wäre es komplizierter zu machen. Fürs Erste sollte nur das Leerzeichenbegrenzer für mich funktionieren.

Antwort

0

ich nicht wirklich wissen, PIG, aber hier einige Infos:

https://pig.apache.org/docs/r0.9.1/func.html#strsplit

STRSPLIT(string, regex, limit) 

regex so etwas wie [\s,]+ sein könnte. Das wird auf beliebige Blöcke von Leerzeichen und Kommas aufgeteilt. So würde zum Beispiel a b,c ,d, e in jeden Buchstaben aufgeteilt werden. die Reihenfolge von Leerzeichen und Komma spielt keine Rolle.

0

Laden Sie die Datei als Zeile und verwenden Sie dann TOKENIZE. Wenn Sie eine Mischung aus Tabs und Leerzeichen haben, fügen Sie nach dem Laden der Daten einen Schritt hinzu, um die Tabs durch Leerzeichen in der Zeile zu ersetzen und TOKENIZE zu verwenden.

A = LOAD 'test2.txt' as (line:chararray); 
B = FOREACH A GENERATE FLATTEN(TOKENIZE(A.$0)); 
C = FOREACH B GENERATE TOBAG(*); 
DUMP C; 

OUTPUT

Output