「 Map and Reduce」アルゴリズムの使用が正当化されるのはどのようなシナリオですか?
このアルゴリズムの .NET 実装はありますか?
Map と Reduce に相当する Linq: 幸運にも linq を使用できる場合は、独自の map 関数と reduce 関数を作成する必要はありません。C# 3.5 と Linq には、別の名前ではありますが、既にそれがあります。
地図はSelect
:
Enumerable.Range(1, 10).Select(x => x + 2);
リデュースはAggregate
:
Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);
フィルターはWhere
:
Enumerable.Range(1, 10).Where(x => x % 2 == 0);
mapreduceスタイルのソリューションに適した問題のクラスは、集約の問題です。データセットからデータを抽出すること。C#では、LINQを利用してこのスタイルでプログラミングできます。
次の記事から:http: //codecube.net/2009/02/mapreduce-in-c-using-linq/
GroupByメソッドはマップとして機能し、Selectメソッドは中間結果を結果の最終リストに縮小する役割を果たします。
var wordOccurrences = words
.GroupBy(w => w)
.Select(intermediate => new
{
Word = intermediate.Key,
Frequency = intermediate.Sum(w => 1)
})
.Where(w => w.Frequency > 10)
.OrderBy(w => w.Frequency);
配布された部分については、DryadLINQをチェックアウトできます:http ://research.microsoft.com/en-us/projects/dryadlinq/default.aspx