2016-04-25 2 views
0

Может кто-нибудь мне помочь? Огромное спасибо. And this is my code:количество гласных в файле

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

, что вопрос вы сталкиваетесь после выполнения этого ?? –

ответ

0

Сначала разметить линию в словах, а затем получить символы с words.Use заменить нарезать символы в words.Instead использования TOBAG (*), используйте разметить разделить символы вдоль замените разделитель. Замените aeiou, затем сгруппируйте персонажа и получите подсчеты.

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; 

Выход

Output

+0

Спасибо! Я изменил код. Он работает! – Titan

0

Пожалуйста, используйте следующий код, чтобы получить результаты.

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;

Смежные вопросы