1

次のコードを作成しました。

#!/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 で実行し、同じマシンでクライアントを実行しています。ただし、私の質問は、複数のマシンで複数のクライアントを実行する場合、ファイルは自動的に分割されるのでしょうか? つまり、ミンスミート サーバーはファイルをクライアントに割り当てて処理するのでしょうか? また、上記の例では、マッパー関数でキーを指定していません。ファイル名などのキーを指定するにはどうすればよいですか?

4

1 に答える 1

1

はい、mincemeat は自動的に作業をクライアント間で均等に分散します (これは MapReduce の中心的な目的の 1 つです)。

map 関数では、yield を呼び出すたびにキーと値が生成されます。この例では、キーは現在繰り返し処理している単語です。

于 2013-09-28T17:35:55.893 に答える