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したがって、各コンピューターにセットからマップを作成させることができます。第 2 (最終) フェーズでは、マップからマップを作成でき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 に答える