用于计算文件中字母数的 Pig 脚本
Posted
技术标签:
【中文标题】用于计算文件中字母数的 Pig 脚本【英文标题】:Pig script to count the number of letters in a file 【发布时间】:2016-04-22 05:14:24 【问题描述】:我想扩展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';
【问题讨论】:
字母数是指每个字母出现的次数。 请不要破坏您的问题。 【参考方案1】:让我说我是 PIG 新手,但不知何故,这个查询让我感兴趣。我分为各种复杂的东西,比如嵌套的foreach
、UDF 等。但最后,答案很简单。这只是对您的猪拉丁语行之一的更正,如下所示:
D = foreach C generate flatten(TOKENIZE(REPLACE(word,'','|'), '|')) as letter;
我不使用regexp_extract_all
,而是选择REPLACE
,每个字母边界都带有一个特殊字符(此处为'|'
,但如果您愿意,您也可以使用不常见的序列),然后在该分隔符周围使用TOKENIZE
.
【讨论】:
【参考方案2】:试试下面的代码
加载数据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';
【讨论】:
以上是关于用于计算文件中字母数的 Pig 脚本的主要内容,如果未能解决你的问题,请参考以下文章