“Combiner" la Classe dans un travail de mapreduce
Un Multiplexeur s'exécute après le Mappeur et avant le Réducteur,il permettra de recevoir toutes les données émises par le Mappeur de cas sur un nœud donné. puis émet de sortie pour les Réducteurs.
Et aussi,Si une fonction de réduction est à la fois commutative et associative, alors il peut être utilisé comme un Multiplexeur.
Ma Question est ce que signifie la phrase "commutative et associative" dans cette situation?
Vous devez vous connecter pour publier un commentaire.
Supposons que vous disposez d'une liste de nombres, de 1 2 3 4 5 6.
Associatif ici signifie que vous pouvez prendre votre opération et de l'appliquer à tous les sous-groupes, puis l'appliquer à la suite de ceux-ci et obtenir la même réponse:
Pense de la parenthèse ici comme l'exécution d'un combineur.
Commutative signifie que l'ordre n'a pas d'importance, donc:
Par exemple, l'addition, s'inscrit parfaitement dans cette propriété, comme on l'a vu. "Maximum" correspond à la propriété ci-dessus, parce que le max de maxs est le max. max(a,b) == max(b,a).
Médiane est un exemple qui ne fonctionne pas: la médiane des valeurs de la médiane n'est pas le vrai médiane.
Ne pas oublier une autre propriété importante d'un combineur: les types d'entrée pour la clé/valeur et les types de sortie de la clé/valeur doit être la même. Par exemple, vous ne pouvez pas prendre dans une chaîne de caractères:int et de retourner une chaîne de caractères:float.
Souvent, le réducteur peut sortie une sorte de chaîne, au lieu de la valeur numérique, qui peut vous empêcher de simplement brancher votre réducteur comme le viseur.
Pour la commutativité, disons que votre réducteur peut être représentée par une fonction (dans le terme mathématique) appelé f(). Ensuite, votre réducteur est commutative si f(a, b) = f(b, a)
Par exemple:
Pour l'associativité, la propriété est que f(f(a, b), c) = f(a, f(b, c)). Par exemple:
Dans le contexte de Map/reduce, votre réducteur de a à l'égard de ces 2 propriétés. Par exemple, si votre réducteur est de faire juste de la somme(), ou un max(), il respecte à la fois les propriétés, mais quelque chose comme moyenne() ou médiane() ne fonctionne pas, et donc vous ne pouvez pas l'utiliser comme un multiplexeur.
Personnellement, je vois les multiplexeurs mini-réducteurs qui s'exécutent en mémoire après la carte de la phase d'optimisation pour réduire le trafic réseau, et la commutativité/associativité réellement de sens que si vous voyez une Carte/Réduire de cette façon: