是否所有MapReduce实现都将一个密钥参数输入到reduce函数中?

时间:2017-10-13 08:05:26

标签: mapreduce

以前我问过将密钥列表传递给CouchDB的reduce函数的用例是什么?答案(https://stackoverflow.com/a/46713674/3114742)提到了两个潜在的用例:

  1. 从设计角度来看,您可能希望使用地图功能发出的键
  2. 您可能正在根据键输入计算某些内容(例如特定键出现的频率)
  3. MapReduce的所有实现是否都将一组键作为reduce函数的输入? CouchDB专门跟踪生成密钥的原始文档。即CouchDB减少函数的输入:

    function(keys, values, rereduce) {...}
    

    键arg如下所示:[[key1,id1], [key2,id2], [key3,id3]]

    即。 Couch通过Map函数跟踪发出键的实体,即使在reduce函数中也是如此。其他MapReduce实现是否跟踪这些信息?或者这是特定于CouchDB ......

1 个答案:

答案 0 :(得分:1)

并非所有mapreduce实现都具有与couchdb相同的结构。 例如,在mongodb mapreduce中,与couch db不同,只有一个键和值列表。因此,map函数发出的所有键都被分组并作为一个键和值列表传递以减少函数。

示例:

emit(1,10)
emit(1,20)

将分组到

reduce(1,[10,20])