2016-04-25 4 views
0

Kann mir jemand dabei helfen? Vielen Dank. Und das ist mein Code:die Anzahl der Vokale in einer Datei

G = LOAD 'input.txt' AS (line:chararray); 
B = foreach G generate FLATTEN(STRSPLIT(LOWER(line), '(?<=.)(?=.)')) as s:chararray; 
C = foreach B generate FLATTEN(TOBAG(*)) as letter; 
result = filter C by (letter == 'a' or letter == 'e' or letter == 'i' or letter == 'o' or letter == 'u'); 
E = GROUP result BY letter; 
F = foreach E generate group, COUNT(result) ; 
DUMP F; 
+0

was Problem konfrontiert sind Sie nach dieser Ausführung ?? –

Antwort

0

Erst die Leitung in Worte tokenize und erhalten dann die Zeichen aus dem words.Use ersetzen die Zeichen in der words.Instead der Verwendung TOBAG (*) zu schneiden, verwenden tokenize die Zeichen entlang der aufzuspalten Ersetzen Sie delimiter.Filter aeiou, dann gruppieren Sie nach dem Charakter und erhalten Sie die Zählungen.

PigScript

A = LOAD 'test4.txt' as (line:chararray); 
B = FOREACH A GENERATE FLATTEN(TOKENIZE(line)) as words; 
C = FOREACH B GENERATE FLATTEN(TOKENIZE(REPLACE(LOWER(words),'','|'),'|')) as letter; 
D = FILTER C BY (letter == 'a' or letter == 'e' or letter == 'i' or letter == 'o' or letter == 'u'); 
E = group D by letter; 
F = FOREACH E GENERATE group as letter,COUNT(D.letter) as total; 
DUMP F; 

Ausgabe

Output

+0

Vielen Dank! Ich habe den Code geändert. Es funktioniert! – Titan

0

Verwenden Sie bitte den folgenden Code, um die Ergebnisse zu erhalten.

A = LOAD 'input.txt' AS (line:chararray); B = FOREACH A GENERATE FLATTEN(TOKENIZE(REPLACE(LOWER((chararray)$0),'','|'),'|')) as letter:chararray; result = FILTER B by (letter == 'a' or letter == 'e' or letter == 'i' or letter == 'o' or letter == 'u'); E = GROUP result BY letter; F = FOREACH E GENERATE group, COUNT(result); DUMP F;