我创建了以下代码:
#!/usr/bin/env python
import mincemeat
import glob
all_files = glob.glob('textfiles/*.txt')
def file_contents(file_name):
f = open(file_name)
try:
return f.read()
finally:
f.close()
# The data source can be any dictionary-like object
datasource = dict((file_name, file_contents(file_name))
for file_name in all_files)
def mapfn(k, v):
for w in v.split():
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
我在我的个人mac上运行它并在同一台机器上运行客户端。但是,我的问题是如果我在多台机器上运行多个客户端,文件会自动分割吗?我的意思是mincemeat服务器会将文件分配给客户端进行处理吗?此外,在上面的示例中,我没有在映射器函数中指定键。如何指定密钥,例如文件名?
答案 0 :(得分:1)
是的,mincemeat会自动在客户端间平均分配工作(这是MapReduce的核心目标之一)。
在map函数中,每次调用yield都会产生一个键和一个值。在此示例中,键是您当前正在迭代的单词。