假设有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
。是否有意义 ?你会如何改进这种方法?
答案 0 :(得分:2)
这是标准的地图缩减示例。
例如,这里是基于mincemeat map/reduce library的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任务固定分区到每个客户端。
如果一个客户端比其他客户端更快,那么最终将获得更多任务以充分利用可用资源。