2013-09-05 72 views
0

我想在豬運行簡單的字計數器拉丁如下:計數結果行拉丁

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

我想指望找到多少SOME_VALUE小號搜索SOME_FILES,所以預期的輸出應該像:

(SOME_VALUE,xxxx) 

其中xxxx,是SOME_VALUE發現的總數。

如何搜索多個值並按上述方式打印每個值?

回答

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

+0

好的如何搜索多個字符串? –

+0

你是什麼意思?你只想在輸出中看到一組特定的字符串嗎? – mr2ert

+0

是的,非常感謝您的回答:) –