文件中的元音数量

时间:2016-04-25 06:43:04

标签: apache-pig

有人可以帮我吗?非常感谢。这是我的代码:

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;

2 个答案:

答案 0 :(得分:0)

Please use the following code to get the results.

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;

答案 1 :(得分:0)

首先将行标记为单词然后从单词中获取字符。使用replace来切换单词中的字符。而不是使用TOBAG(*),使用tokenize将字符沿着替换的分隔符分割.Filter 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