肉馅.py数据源文件划分

2024-06-08 21:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了以下代码:

#!/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服务器会把文件分配给客户机进行处理吗?另外,在上面的例子中,我没有在mapper函数中指定键。如何指定密钥,例如文件名?在


Tags: nameinimportforreturndefcontentsfiles
1条回答
网友
1楼 · 发布于 2024-06-08 21:21:20

是的,mincemeat会自动将工作均匀地分布在客户机上(这是MapReduce的中心目标之一)。在

在map函数中,每次调用yield都会生成一个键和一个值。在本例中,关键是当前要迭代的单词。在

相关问题 更多 >