用于计算文件中字母数的 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用 pig 脚本计算字段的不同值的计数

PIG 脚本根据特定单词将大型文本文件拆分为多个部分

在 Pig 脚本中获取意外符号

我可以在 Pig 脚本中将参数传递给 UDF 吗?

使用python计算文件中删除行数的最佳方法

用于过滤多个字符串上的文件的 Pig 脚本/命令