2015-10-20 3 views
0
from mrjob.job import job 


class KittyJob(MRJob): 

    OUTPUT_PROTOCOL = JSONValueProtocol 

    def mapper_cmd(self): 
     return "grep kitty" 

    def reducer(self, key, values): 
     yield None, sum(1 for _ in values) 


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

Источник: https://mrjob.readthedocs.org/en/latest/guides/writing-mrjobs.html#protocolsОбъяснения этого примера MRJob

Как этот код делать свою задачу подсчета числа строк, содержащих котенок?

И где определяется OUTPUT_PROTOCOL?

ответ

1

Ну, короткий ответ заключается в том, что этот пример не включает строки, содержащие «котенок».

Вот код, с помощью фильтров, что делает подсчет строк, содержащие (без учета регистра) кошечки:

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 Документах просто неправильно.

 Смежные вопросы

  • Нет связанных вопросов^_^