2016-11-26 4 views
0

Ich schreibe, weil ich heute auf ein Problem stieß, das ich in keiner Weise lösen kann, obwohl ich überall gesucht und viele verschiedene Aussagen ausprobiert habe. Ich habe diese Eingabedatei:Pig Latein: Loading a very simple Tasche

3 {(car pen house glass)} 
5 {(battery phone)} 
6 {(the)} 

(ich möchte klarstellen, dass ich hinzugefügt haben ‚(‘ und ‚)‘ auf die Originaldatei, weil sie fehlten). Mein Ziel ist nur diese Datei (mit LOAD) in eine Variable zu laden und sie zu dumpen (mit DUMP).

zeigen, dass ich unter die Versuche ich gemacht und ihre relative DUMP Ausgänge:

wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:bag{(s:chararray)}); 

(3,) 
(5,) 
(6,{(the)}) 


wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:tuple(s:chararray)); 

(3,) 
(5,) 
(6,(the)) 


wc = LOAD 'input.txt' USING PigStorage(' ') AS (count:int,b:bag{item:tuple(s:chararray)}); 

(3,) 
(5,) 
(6,{(the)}) 

Sie eine Idee haben, um es zu lösen?

Vielen Dank im Voraus.

Antwort

0

Das Problem hier ist, dass Sie '' als Trennzeichen verwenden und die Tasche enthält ''. Eine Problemumgehung besteht darin, die Datensätze in eine Zeile zu laden und dann mit STRSPLIT die Zeile in 2 Felder aufzuteilen.

wc = LOAD 'input.txt' AS (line:chararray); 
wc_new = FOREACH wc GENERATE STRSPLIT(line,' ',2); 
DUMP wc_new;