当前位置: 首页 > 知识库问答 >
问题:

是否需要澄清将作业映射/减少到数据集的计算机平均值?

祁和通
2023-03-14

我正在学习map/reduce,我正在研究计算数据集中特定列中所有值的平均值的问题。

到目前为止,我在上看到的所有解决方案都遵循这一思路

数据集
1
2
3
4
5

映射作业:生成键、值对,键为1
(1,1)
(1,2)
(1,3)
和(1,4)

现在,由于映射作业的输出的键是相同的,因此所有这些键都将发送到一个化简器,在那里我们可以进行计算总和/计数

然而,我的问题是,对所有条目使用相同的键是否直观?map/duce的目的不是拆分作业,以便我们可以让它们同时运行吗?对所有map的输出使用相同的键不会影响map/duce的目的吗?

这是计算平均值最有效的算法吗?还是可以进一步改进?

共有1个答案

蒋寒
2023-03-14

映射减少的输入数据将根据输入数据的大小进行拆分。映射器将为每个拆分运行,这些映射器将同时运行。一旦所有映射器完成,将根据映射器的输出键触发减少器。减少器的数量可以手动设置,或者默认情况下由分区人员负责。

在您的用例中,您需要计算数据集的平均值,为所有映射器输出提供相同的键将是正确的。如果输入数据集的大小比单个映射器更自动,则将触发所有映射器并同时运行。

 类似资料:
  • 我是Hadoop Map/Reduce的新手。我正在尝试编写一个Map/Reduce作业,以查找n个进程所花费的平均时间,给定一个输入文本文件,如下所示: 我读了一些教程,但仍然不能完全理解。我的mapper和reducer类应该如何解决这个问题?我的输出将始终是文本文件,还是可以直接将平均值存储在某种变量中? 谢了。

  • 我认为用A*算法应该是SAEFG,但答案是SBEFG。现在我的教授是一个无所事事的人。有人能解释为什么是SBEFG吗?

  • 能否请你澄清以下几点? 当前的quartz 2.1是否支持RamJobStore的群集? 在群集环境中,是否有方法通过Quartz指定作业在所有节点中运行? 在群集环境中,是否有方法通过Quartz指定作业在特定节点中运行?

  • 我试图使用下面的代码来计算用户输入的一组值的平均值,并将其显示在中,但它不能正常工作。例如,用户输入7、4和5,程序显示1作为平均值,而它应该显示5.3

  • 我现在正在阅读Instagram的设计,我发现了对他们负载平衡系统的这样一个描述。 每个对Instagram服务器的请求都要经过负载平衡机;我们曾经运行过2台nginx机器,并在它们之间进行DNS循环。这种方法的缺点是DNS更新所需的时间,以防其中一台机器需要取消使用。最近,我们开始使用Amazon的弹性负载平衡器,它后面有3个NGINX实例,可以进行交换(如果运行状况检查失败,它们会自动停止循环

  • 如果我执行以下“连接”两个流的代码 < li >首先通过平面映射< code >流 我在两种情况下都获得了相同的正确结果,但过滤操作的次数不同。 我在两种情况下都得到了预期的结果(3)。但是,第一个操作对集合的每个元素应用第一个过滤器,而第二个操作在遇到一个过滤器时就停止。输出是: 为什么两者之间的行为有所不同?JDK代码在第一个场景中是否可以改进为与第二个场景中一样高效,或者是否有一些东西使其不