假设我们希望通过MapReduce实现Local Sensitive Hashing(LSH)。具体来说,假设签名矩阵的块由列组成,而元素是键值对,其中键是列号,值是签名本身(即值的向量)。
(a)展示如何为所有乐队制作乐队作为单曲的输出 MapReduce进程。提示:请记住,Map函数可以生成 来自单个元素的几个键值对。
(b)展示另一个MapReduce进程如何将(a)的输出转换为 需要比较的对列表。具体来说,对于每列i, 应该列出那些列j>我需要的是 比较。
答案 0 :(得分:2)
(a)中
map(key, value: element):
split item to bands
for band in bands:
for sig in band:
key = hash(sig) // key = bucket id
collect(key, value)
reduce(key, values):
collect(key, values)
(b)
map(key, value):
for itemA, itemB in combinations(value)
key = (itemA.id, itemB.id)
collect(key, [itemA, itemB])
reduce(key, values):
collect(key, values)