2016-04-22 49 views
0

我想扩展hello世界程序的hadoop字数,以便能够计算输入文件中字母的数量。猪脚本来计算文件中的字母数

我写了这个到目前为止,我无法弄清楚这个代码有什么问题。任何帮助确定问题将不胜感激。

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

通过字母数我的意思是每个字母出现的次数的计数。 – midnightsoul

+5

请不要破坏你的问题。 – hichris123

+2

...也没有答案 –

回答

2

让我说我是一个猪新手,但不知何故这个查询让我感兴趣。我分为各种复杂的东西,如嵌套的foreach,UDF等。但最终,答案非常简单。它只是在你的猪拉丁行,如下一个修正:

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

而不是使用regexp_extract_all的,我反而选择将REPLACE每个字母的边界以特殊字符('|'这里,虽然你可以使用一种罕见的序列也如果你喜欢),然后围绕该分隔符TOKENIZE

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';