hadoop - Map 可以多次计算出现次数吗?
问题描述
我读过一个教程,它Map
计算字典中的每个单词,如下所示:
('house', 1)
.
然后在一个巨大的文本中它可能会多次找到“房子”这个词。因此,该Reduce
函数将从该函数中获取尽可能多的 (house,1) ,并且如果它在文档中找到它 100 次,Map
它将迭代给出 a 。('house',100)
这是它的工作原理吗?为什么该Map
函数第二次找到“house”这个词时没有存储它('house',2)
?
解决方案
Mapper 在输入中的每个项目上都会被调用,然后它会发出一系列中间键/值对。
这些键/值对如下所示:(feature, partial aggregate value)或(house, 1)在您的示例中。之后,给定键的所有发出的值都像这样(feature, (value1, value2, etc.)或(house, (1, 1, 1, 1, 1))组合在一起。
最后,Reducer 从该特征的所有中间值计算最终聚合结果。因此,(feature, (value1, value2, etc.)变为(feature, totalValue)。或者(house, (1, 1, 1, 1, 1))变为(house, 5)。
映射器不计算该特征(或您的示例中的单词)出现的次数,它只是将输出拆分为(特征,值)。Reducer 的工作是计算特征的最终聚合。否则,Reducer 的目的是什么?
我需要说明我目前正在学习 Hadoop 和 MapReduce 编程模型。因此,如果我错了,请纠正我。
推荐阅读
- c# - 当同一组合框中的文本更改时如何填充组合框项目
- xamarin.forms - Xamarin 使用用户证书形成 android
- docusignapi - DocuSign 是否使用最新的 TLS 密码套件?
- database - Symfony 4 / Webpack Encore - 从数据库中动态恢复和应用 CSS 样式
- reactjs - 当在测验中选择选项时警报引导在 React JS 中不起作用
- java - 从命令行创建 AVD 失败;消息说找不到 java.se.ee
- ruby-on-rails - structure.sql 中的内容无效
- javascript - 我在 discord.js 定时静音命令中遇到了 removeRole 问题(removeRole 不是函数)
- sql - :r 命令可以正常工作,直到我将其移入 IF 或 BEGIN TRY/END TRY 语句
- django - Django 查询集过滤具有相同多对多字段的对象