2015-10-20 249 views

回答

1

那麼,簡單的答案是,這個例子不計算包含'kitty'的行。

下面是使用過濾器,不包含(不區分大小寫)貓咪數行的某些代碼:

from mrjob.job import MRJob 
from mrjob.protocol import JSONValueProtocol 
from mrjob.step import MRStep 

class KittyJob(MRJob): 
    OUTPUT_PROTOCOL = JSONValueProtocol 

    def mapper(self, _, line): 
     yield 'kitty', 1 

    def sum_kitties(self, key, values): 
     yield None, sum(values) 

    def steps(self): 
     return [ 
      MRStep(mapper_pre_filter='grep -i "kitty"', 
        mapper=self.mapper, 
        reducer=self.sum_kitties)] 

if __name__ == '__main__': 
    KittyJob().run() 

如果我運行它使用本地亞軍爲在英文維基百科頁面的文本中Shell Commands as Steps注意「小鷹」,然後我得到含有「小貓」如預期的所有行的計數:

$ python grep_kitty.py -q -r local kitty.txt 
20 
$ grep -ci kitty kitty.txt 
20 

看起來你從mrjob文檔舉的例子是錯誤的。