le combineur et le réducteur peuvent être différents?
Dans de nombreux programmes MapReduce, je vois un réducteur utilisé comme un multiplexeur. Je sais que c'est en raison de la nature spécifique de ces programmes. Mais je me demande si elles peuvent être différentes.
source d'informationauteur kee
Vous devez vous connecter pour publier un commentaire.
Oui, un multiplexeur peut être différente pour le Réducteur, bien que votre Viseur sera toujours la mise en œuvre de l'Réducteur de l'interface. Les multiplexeurs peuvent être utilisés uniquement dans des cas spécifiques qui vont de l'emploi dépendant. Le Combineur fonctionnera comme un Réducteur, mais seulement sur le sous-ensemble de la Clé/Valeurs de sortie de chaque Mappeur.
Une contrainte Combiner votre aura, contrairement à un Réducteur, c'est que l'entrée/sortie de la clé et de la valeur des types de doit correspondre les types de sortie de votre Mapper.
Ouais sûrement, elles peuvent être différents, mais je ne pense pas que vous souhaitez utiliser une autre classe comme la plupart du temps, vous obtiendrez résultat inattendu.
Combiné peut être utilisé uniquement sur les fonctions qui sont commutative(un.b = b.a) à la vie associative et {un.b.c) = (a.b).c} . Cela signifie également que les multiplexeurs peuvent fonctionner que sur un sous-ensemble de vos clés et les valeurs peuvent ne pas s'exécuter du tout, encore, vous voulez la sortie du programme restent les mêmes.
De choisir une autre classe avec une logique différente ne peut pas vous donner une logique de sortie.
Ici est la mise en œuvre , vous pouvez exécuter sans combiner et à combiner , à la fois donne exactement la même réponse . Ici, le Réducteur et Combiner a des intentions différentes et de mise en œuvre différente.
Réduire Classe
MapObject Classe
Combiner Classe
De La Classe Du Pilote
Git le code de ici
Quitter ur suggestions..
L'objectif principal de multiplexeurs est d'optimiser/réduire le nombre de paires clé-valeur qui sera
être mélangées à travers le réseau entre les contributeurs et les réducteurs et donc de l'enregistrer comme la plupart des
la bande passante possible.
La manette de la règle de combiner est qu'elle doit avoir la même entrée et de sortie les types de variables, la raison
pour cela, est de combiner l'utilisation n'est pas garantie, il peut ou ne peut pas être utilisé , selon le volume
et le nombre de déversements.
Le réducteur peut être utilisé comme un viseur lorsqu'il satisfait à cette règle, c'est à dire même en entrée et en sortie
type de variable.
L'autre règle la plus importante pour combiner elle ne peut être utilisée lorsque la fonction que vous voulez
à appliquer est à la fois commutative et associative. comme l'ajout de numéros .Mais pas dans des cas comme le moyen(si u r en utilisant le même code en tant que réducteur).
Maintenant pour répondre à votre question, oui bien sûr, ils peuvent être différents, et lorsque votre réducteur a différents type d'entrée et de sortie des variables, u n'avons pas le choix , mais pour faire une autre copie de ur réducteur de code et de le modifier.
Si u r préoccupé par la logique du réducteur , que vous pouvez mettre en œuvre dans un autre sens, par exemple dans le cas d'un viseur, vous pouvez avoir un objet de collection pour avoir un tampon local de toutes les valeurs à venir pour les combiner, c'est moins risqué que de l'utiliser dans réducteur, car en cas de réducteur , il est plus enclin à sortir de la mémoire que dans les combiner. la logique des différences peuvent exister et ne.