2015-10-20 195 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文档举的例子是错误的。