2009-01-09 21 views
84

¿Qué escenarios justificarían el uso del algoritmo "Map and Reduce"?Mapa y Reducir en .NET


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

+3

posible duplicado de [lista de extensiones genéricas en C#] (http://stackoverflow.com/questions/40075/generic-list-extensions-in-c-sharp) – Satpal

Respuesta

160

equivalentes de Linq Mapa y Reducir: Si tienes la suerte de tener LINQ, entonces no es necesario escribir su propio mapa y reducir funciones. C# 3.5 y Linq ya lo tienen aunque con diferentes nombres.

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/

+1

La traducción es correcta pero omite un punto clave. El paso aleatorio en la reducción del mapa es crítico en map-reduce, pero no aparece en el nombre y no es necesario escribir ningún código. Solo depende de la clave que se extrae en el paso del mapa. Joel Martinez responde que, en mi opinión, es mejor. – user1583558

+2

El enlace no funciona, el enlace correcto es: https://www.justinshield.com/2011/06/mapreduce-in-c/ –

1

Si estabas tratando de escribir tu propia versión de Google, ¡eso podría garantizarlo!

En serio, si tiene un problema que puede descomponerse en varios problemas más pequeños, entonces una solución Map-Reduce funcionaría. El documento de Google en MapReduce tiene un buen número de ejemplos, incluyendo la forma de procesar miles de páginas web, el recuento de palabras del documento, etc, etc

+2

MapReduce enlace es roto @Sean. Aquí está el nuevo enlace http://research.google.com/archive/mapreduce.html – Vbp

+0

@vbp - gracias, he actualizado la respuesta – Sean

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcione el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la reseña] (/ review/low-quality-posts/18027646) – Gerard

10

Ver esta otra pregunta respecto map/reduce:

Generic List Extensions in C#

+0

Gracias Ray, su enlace llevó a mucha información útil – Developer

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la reseña] (/ crítica/mensajes de baja calidad/18026777) – nvoigt

12

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

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

el método GroupBy está actuando como el mapa, mientras que el método Select hace el trabajo de la reducción de los resultados intermedios en la lista final de los 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, se puede consultar DryadLINQ: http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx

Cuestiones relacionadas