Карта и сокращение in.NET


какие сценарии оправдывают использование " карта и уменьшить"?


есть ли .NET реализация этого алгоритма?

4 98

4 ответа:

эквиваленты Linq карты и уменьшения: Если вам посчастливилось иметь linq, вам не нужно писать свою собственную карту и уменьшать функции. C# 3.5 и Linq уже имеют его, хотя и под разными именами.

Map = Select | Enumerable.Range(1, 10).Select(x => x + 2);
Reduce = Aggregate | Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);
Filter = Where | Enumerable.Range(1, 10).Where(x => x % 2 == 0);

https://www.justinshield.com/2011/06/mapreduce-in-c/

классы задач, которые хорошо подходят для решения стиля 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

см. этот другой вопрос относительно map / reduce:

расширения общего списка в C#

Если вы пытались написать свою собственную версию Google, то это может оправдать его..!!!

серьезно, хотя, если у вас есть проблема, которую вы можете разложить на несколько более мелких проблем, то решение Map-Reduce будет работать. Документ Google на MapReduce имеет ряд хороших примеров, в том числе как обрабатывать тысячи веб-страниц, подсчитывать слова в документе и т. д. и т. д.