Mapear y reducir en .NET

Resuelto Developer asked hace 15 años • 3 respuestas

¿Qué escenarios justificarían el uso del algoritmo " Mapear y Reducir "?


¿Existe una implementación .NET de este algoritmo?

Developer avatar Jan 09 '09 23:01 Developer
Aceptado

Equivalentes de Linq de Map y Reduce: si tienes la suerte de tener linq, entonces no necesitas escribir tu propio mapa y funciones de reducción. C# 3.5 y Linq ya lo tienen, aunque con nombres diferentes.

  • El mapa es Select:

    Enumerable.Range(1, 10).Select(x => x + 2);
    
  • Reducir es Aggregate:

    Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);
    
  • El filtro es Where:

    Enumerable.Range(1, 10).Where(x => x % 2 == 0);
    

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

Tony avatar Dec 15 '2012 19:12 Tony

Las clases de problemas que se adaptan bien a una solución de estilo mapreduce son problemas de agregación. De extraer datos de un conjunto de datos. En C#, se podría aprovechar LINQ para programar con este estilo.

Del siguiente artículo: http://codecube.net/2009/02/mapreduce-in-c-using-linq/

el método GroupBy actúa como mapa, mientras que el método Select hace el trabajo de reducir los resultados intermedios a la lista final de resultados.

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);

Para la parte distribuida, puede consultar DryadLINQ: http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx

Joel Martinez avatar Mar 02 '2009 20:03 Joel Martinez