我想扩展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';
答案 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';