1

假设有N一组单词,我想从这些集合中创建一个映射,以便将单词映射到所有这些集合中出现的单词的数量。

例如:

N = 3
S1 = {“a”、“b”、“c”},S2 = {“a”、“b”、“d”},S3 = {“a”、“c”、“e”}
M = { "a" -> 3, "b" -> 2, "c" -> 2, "d" -> 1, "e" -> 1}

现在我有M电脑可以使用。因此,我可以让每台计算机从N/M集合中创建一个地图。在第二(最后)阶段,我可以从地图创建M地图。看起来像一个map/reduce。是否有意义 ?您将如何改进这种方法?

4

1 回答 1

2

这是标准的 map reduce 示例。

例如这里是基于mincemeat map/reduce 库的 Python 代码:

#!/usr/bin/env python
import mincemeat

S1 = {"a", "b", "c"}
S2 = {"a", "b", "d"}
S3 = {"a", "c", "e"}

datasource = dict(enumerate([S1,S2,S3]))

def mapfn(k, v):
    for w in v:
        yield w, 1

def reducefn(k, vs):
    result = sum(vs)
    return result

s = mincemeat.Server()
s.datasource = datasource
s.mapfn = mapfn
s.reducefn = reducefn

results = s.run_server(password="changeme")
print results

印刷

{'a': 3, 'c': 2, 'b': 2, 'e': 1, 'd': 1}

请注意,map/reduce 的结构方式意味着服务器在客户端完成任务时向客户端提供新任务。

这意味着对于每个客户端,不一定有 N/M 个任务的固定分区。

如果一个客户端比其他客户端更快,那么它最终将被分配更多任务,以充分利用可用资源。

于 2013-09-21T21:45:47.310 回答