在猪拉丁计数结果线

时间:2013-09-05 14:36:44

标签: apache-pig

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

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

我想要计算搜索SOME_VALUE的{​​{1}}个搜索次数,因此预期的输出应该是这样的:

SOME_FILES

(SOME_VALUE,xxxx) 的位置,是xxxx找到的总数。

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

1 个答案:

答案 0 :(得分:1)

你应该做的是将每一行分成一包代币,然后FLATTEN。然后,您可以对单词执行GROUP,将每个单词的所有出现都放入其自己的行中。完成所得包的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') ;

但是,您也可以在BC之间执行此操作,这样您就不会执行任何您不需要的COUNT