了解Map Reduce-以下代码中的工作流程

如何解决了解Map Reduce-以下代码中的工作流程

(结尾处附有代码

我无法理解以下有关字数统计问题的代码。据我了解(请纠正,如果我错了),映射器会在元组的一组行上生成输出

"the",1
"wheels",1
"on",1
"the",1
"bus",1
"go",1
"round",1
"and",1

我试图了解python sum函数如何在这些单独的元组上工作,我在列表上看到了sum的示例,但在元组上却找不到很多。还应该在reducer中不存在一个循环,以确保它对所有单词都执行操作吗?

from mrjob.job import MRJob
import re

WORD_REGEX = re.compile(r"\b\w+\b")

class Wordcount(MRJob):

    def mapper(self,_,line):
        words = WORD_REGEX.findall(line)
        for word in words:
            yield (word.lower(),1)

    def reducer(self,word,counts):

        yield(word,sum(counts))

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

解决方法

元组的和与列表中的和完全相同。通常,元组基本上只是不可变的列表。

由于此Wordcount类是从父MRJob类派生的,因此我们继承了run函数。此功能在抽象层后面为我们进行了一些汇总。

mapper函数的用法与您说的一样,使用python生成器函数一次返回列表中的每个元组。

因此MRJob包的run函数将在每一行上调用mapper,为您汇总信息,以便将reducer暴露于参数(单词,计数),其中word是来自文本输入的单词,而counts是列表映射器返回的值。即Wordcount.run()将(在映射步骤之后)进行函数调用:reducer(“ the”,[1,1]),然后reducer将“返回”元组(“ the”,2)(由于求和([1,1])= 2)。这将针对您的文本输入中的每个单词完成。

值得注意的是,MrJob函数允许您定义一个组合器函数,该函数充当映射和归约之间的中间人,并可能有助于理解该过程(并使复杂的作业更快一些)。以下是MRJob文档中示例的链接,该示例进一步说明了每个功能:

https://mrjob.readthedocs.io/en/latest/guides/concepts.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?