Pig脚本用于计算文件中的字母数

时间:2016-04-22 05:14:24

标签: apache-pig bigdata

我想扩展hadoop字数的hello world程序,以便能够计算输入文件中的字母数。

到目前为止我已写过这篇文章了,我无法弄清楚这段代码有什么问题。任何帮助确定问题都将受到赞赏。

A = load '/tmp/alice.txt';
B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;
C = filter B by word matches '\\w+';
D = foreach C generate flatten(REGEX_EXTRACT_ALL(word, '([a-zA-Z])')) as letter;
E = group D by letter;
F = foreach E generate COUNT(D), group;
store F into '/tmp/alice_wordcount';

2 个答案:

答案 0 :(得分:2)

让我说我是一个PIG新手,但不知怎的,这个问题让我感兴趣。我分成了各种复杂的东西,如嵌套的foreach,UDF等。但最后,答案非常简单。它只是对你的一条猪拉丁线的修正如下:

D = foreach C generate flatten(TOKENIZE(REPLACE(word,'','|'), '|')) as letter;

我没有使用regexp_extract_all,而是选择REPLACE每个字母边界都带有一个特殊字符('|',尽管如果您愿意,也可以使用不常见的序列)然后TOKENIZE围绕该分隔符。

答案 1 :(得分:0)

尝试以下代码

加载数据A = load '/tmp/alice.txt';

将该行拆分为单词B = foreach A generate flatten(TOKENIZE((chararray)$0)) as word;

将单词分成字符C = foreach B generate flatten(TOKENIZE(REPLACE($0,'','|'),'|')) as letter;

将字母D = GROUP C BY letter;

分组

使用每个字母E = foreach D generate COUNT(C), group;

的计数生成结果

Store F into '/tmp/alice_wordcount';