首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >此MRJob示例的说明

此MRJob示例的说明
EN

Stack Overflow用户
提问于 2015-10-20 10:47:29
回答 1查看 880关注 0票数 0
代码语言:javascript
复制
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

这段代码如何完成计算包含kitty的行数的任务?

另外,OUTPUT_PROTOCOL是在哪里定义的?

EN

回答 1

Stack Overflow用户

发布于 2015-11-20 10:51:28

简而言之,本例不计算包含'kitty‘的行。

下面是一些使用过滤器的代码,这些过滤器计算包含(不区分大小写)kitty的行:

代码语言:javascript
复制
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中提到的本地运行器对'Kitty‘的英文维基百科页面的文本运行它,那么我会像预期的那样得到包含'kitty’的所有行的计数:

代码语言:javascript
复制
$ python grep_kitty.py -q -r local kitty.txt
20
$ grep -ci kitty kitty.txt
20

看起来您从mrjob文档中引用的示例是错误的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33227126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档