0

我正在尝试在猪拉丁语中运行简单的单词计数器,如下所示:

lines = LOAD 'SOME_FILES' using PigStorage('#') as (line:chararray);
word = FILTER lines BY (line matches '.*SOME_VALUE.*');

我想计算有多少SOME_VALUEs 找到了 search SOME_FILES,所以预期的输出应该是这样的:

(SOME_VALUE,xxxx)

其中xxxx, 是找到的总数SOME_VALUE

如何搜索多个值并按上述方式打印每个值?

4

1 回答 1

1

你应该做的是将每一行分成一袋令牌,然后FLATTEN是它。然后,您可以对单词执行 aGROUP以将每个单词的所有出现都拉到它自己的行中。完成COUNT结果包后,您将获得文档中所有单词的总数。

这看起来像:

B = FOREACH lines GENERATE FLATTEN(TOKENIZE(line)) ;
C = GROUP B BY $0 ;
D = FOREACH C GENERATE group AS word, COUNT(B) AS count ;

如果您不确定每个步骤在做什么,那么您可以使用DESCRIBEDUMP来帮助可视化正在发生的事情。


更新:如果您想过滤结果以仅包含您想要的几个字符串,您可以执行以下操作:

E = FILTER D BY (word == 'foo') OR 
                (word == 'bar') OR 
                (word == 'etc') ;

-- Another way...
E = FILTER D BY (word matches 'foo|bar|etc') ;

但是,您也可以在 and 之间执行此操作BC因此您不需要执行任何COUNTs。

于 2013-09-05T17:02:28.007 回答