在MapReduce中删除重复项是否始终需要Reduce?

在MapReduce中删除重复项是否始终需要Reduce?,map,mapreduce,parallel-processing,reduce,Map,Mapreduce,Parallel Processing,Reduce,为什么MapReduce中需要Reduce?如果通过单个进程或MapReduced在服务器群上执行一项工作(如计算一本书中的字数)将产生相同的结果,那么必须删除重复项的可能性有多大?我假设Reduce步骤(至少在本例中)将简单地对每个工作进程的结果求和,并提供书中的总字数。我不明白照片里是从哪里来的复制品 Reduce步骤并不用于删除重复项(尽管在某些情况下这是一个可能的用例)。Reduce用于聚合来自具有相同键的各种映射器的输出 例如,在单词计数示例中,节点1可能得到10个单词实例,比如“sc

为什么MapReduce中需要Reduce?如果通过单个进程或MapReduced在服务器群上执行一项工作(如计算一本书中的字数)将产生相同的结果,那么必须删除重复项的可能性有多大?我假设Reduce步骤(至少在本例中)将简单地对每个工作进程的结果求和,并提供书中的总字数。我不明白照片里是从哪里来的复制品

Reduce步骤并不用于删除重复项(尽管在某些情况下这是一个可能的用例)。Reduce用于聚合来自具有相同键的各种映射器的输出

例如,在单词计数示例中,节点1可能得到10个单词实例,比如“school”,节点2可能有15个实例,节点3可能有12个实例。那么如何计算总数呢?结果10、15和12在不同的节点上。有一个洗牌阶段,将所有这些值带到一个节点(这是分区器分配给键“school”的缩减器)。然后,reducer将拥有该键的所有值,并可以将它们相加

编辑:正如都铎所提到的,我所说的聚合是指更一般意义上的“聚合”

编辑2:为了澄清拉菲姆的疑问: 继续上面的示例,假设节点1有第1-10页,节点2有第11-20页,节点3有第21-30页。因此,在mao阶段之后,我们知道第1-10页有10次“学校”这个词,第11-20页有15次出现这个词,同样,第21-30页也有15次出现。现在我们需要的是这个词在整本书中出现的总次数,所以我们仍然需要把它们加起来。我们需要10+15+12+其他页面范围的数字


如果不使用组合器,则映射器只会在每次单词出现时发送“1”。因此,对于第1-10页,它将作为输出键值发送10次。为了提高效率,我们使用组合器在映射器级别对其进行汇总。因此,如果您使用合并器,它将在节点1本身中使用此功能,并为节点1生成合并输出。

缩减步骤并不用于删除重复项(尽管在某些情况下这是一种可能的用例)。Reduce用于聚合来自具有相同键的各种映射器的输出

例如,在单词计数示例中,节点1可能得到10个单词实例,比如“school”,节点2可能有15个实例,节点3可能有12个实例。那么如何计算总数呢?结果10、15和12在不同的节点上。有一个洗牌阶段,将所有这些值带到一个节点(这是分区器分配给键“school”的缩减器)。然后,reducer将拥有该键的所有值,并可以将它们相加

编辑:正如都铎所提到的,我所说的聚合是指更一般意义上的“聚合”

编辑2:为了澄清拉菲姆的疑问: 继续上面的示例,假设节点1有第1-10页,节点2有第11-20页,节点3有第21-30页。因此,在mao阶段之后,我们知道第1-10页有10次“学校”这个词,第11-20页有15次出现这个词,同样,第21-30页也有15次出现。现在我们需要的是这个词在整本书中出现的总次数,所以我们仍然需要把它们加起来。我们需要10+15+12+其他页面范围的数字


如果不使用组合器,则映射器只会在每次单词出现时发送“1”。因此,对于第1-10页,它将作为输出键值发送10次。为了提高效率,我们使用组合器在映射器级别对其进行汇总。因此,如果您使用合并器,它将在节点1本身中使用该值,并为节点1生成合并输出。

Reduce是一种更为通用的操作。它不一定意味着“通过重复应用一个运算(例如求和)来聚合一组数值”。Map Reduce的正式定义是,它是由以下阶段组成的转换:

  • Map:(kk,vv)->(K'K,V'v1[,v2,…])
    一种操作,分别输入K和V类型的键值对,并生成可能不同类型的键值或键值结果列表
  • 执行分区的洗牌阶段
  • Reduce:(K'K,V'v1[,v2,…])->(K'K,V'v1[,v2,…])
    -一种输入键值列表对的操作,其中“值列表”是对应于键k的所有值的列表,这些值由
    Map
    阶段生成,并生成一个键值或键值对列表,其中输出键必须与输入键具有相同的类型,并且该值为任意类型

  • 这样,您可以看到Reduce操作更加灵活和通用。

    Reduce是一种更加通用的操作。它不一定意味着“通过重复应用一个运算(例如求和)来聚合一组数值”。Map Reduce的正式定义是,它是由以下阶段组成的转换:

  • Map:(kk,vv)->(K'K,V'v1[,v2,…])
    一种操作,分别输入K和V类型的键值对,并生成可能不同类型的键值或键值结果列表
  • 执行分区的洗牌阶段
  • Reduce:(K'K,V'v1[,v2,…])->(K'K,V'v1[,v2,…])
    -一种输入键值列表对的操作,其中“值列表”是对应于键k的所有值的列表,这些值由
    Map
    阶段生成,并生成一个键值或键值对列表,其中输出键必须与输入键具有相同的类型,并且该值为任意类型

  • 这样,您可以看到Reduce操作更加灵活和通用。

    在本书的示例中,为什么不发送一个范围