2009-01-09 8 views
84

Quels scénarios justifieraient l'utilisation de l'algorithme "Map and Reduce"?Mapper et réduire .NET


Existe-t-il une implémentation .NET de cet algorithme?

+3

double possible de [Liste génériques Extensions en C#] (http://stackoverflow.com/questions/40075/generic-list-extensions-in-c-sharp) – Satpal

Répondre

160

équivalents de Linq Carte et Réduire: Si vous êtes assez chanceux d'avoir LINQ alors vous n'avez pas besoin d'écrire votre propre carte et réduisez les fonctions. C# 3.5 et Linq l'ont déjà sous des noms différents.

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 traduction est correcte mais il manque un point clé. L'étape de mélange aléatoire dans la carte est essentielle dans la réduction de la carte, mais n'apparaît pas dans le nom, il n'est pas nécessaire d'écrire un code pour cela. Il est uniquement piloté par la clé extraite à l'étape de la carte. Joel Martinez réponse souligne que, à mon avis, mieux. – user1583558

+2

Lien ne fonctionne pas, le lien correct est: https://www.justinshield.com/2011/06/mapreduce-in-c/ –

1

Si vous essayiez d'écrire votre propre version de Google, alors cela pourrait le justifier .. !!! Mais sérieusement, si vous avez un problème que vous pouvez décomposer en plusieurs petits problèmes, alors une solution Map-Reduce fonctionnera. Le document Google sur MapReduce a un certain nombre de bons exemples, y compris la façon de traiter des milliers de pages web, compter les mots dans le document, etc etc

+2

MapReduce Link cassé @Sean. Voici le nouveau lien http://research.google.com/archive/mapreduce.html – Vbp

+0

@vbp - merci, j'ai mis à jour la réponse – Sean

+0

Alors que ce lien peut répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [À revoir] (/ review/low-quality-posts/18027646) – Gerard

10

Voir cette autre question concernant la carte/Reduce:

Generic List Extensions in C#

+0

Merci Ray, votre lien a conduit à beaucoup d'informations utiles – Developer

+0

Alors que ce lien peut répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [À revoir] (/ review/low-quality-posts/18026777) – nvoigt

12

Les classes de problèmes qui conviennent bien à une solution de type mapreduce sont des problèmes d'agrégation. D'extraire des données d'un ensemble de données. En C#, on pourrait profiter de LINQ pour programmer dans ce style.

De l'article suivant: http://codecube.net/2009/02/mapreduce-in-c-using-linq/

la méthode GroupBy agit comme la carte, alors que la méthode Select fait le travail de réduire les résultats intermédiaires dans la liste finale des résultats.

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

Pour la partie distribuée, vous pouvez vérifier DryadLINQ: http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx