Je pense à la construction d'une petite application de test dans hadoop pour maîtriser le système.Trier les valeurs avant qu'elles ne soient envoyées au réducteur
L'application que j'ai à l'esprit sera dans le domaine de la statistique. Je veux avoir "Les 10 pires valeurs pour chaque touche" de ma fonction réducteur (où je dois supposer la possibilité d'un grand nombre de valeurs pour certaines touches).
Ce que j'ai prévu, c'est que les valeurs qui vont dans mon réducteur seront essentiellement la combinaison de "La valeur réelle" et "La qualité/pertinence de la valeur réelle". En fonction de la pertinence, je "veux" simplement prendre les 10 valeurs les plus basses/les meilleures et les sortir du réducteur.
Comment est-ce que je fais cela (en supposant un grand nombre de valeurs pour une clé spécifique)? Existe-t-il un moyen de trier toutes les valeurs AVANT qu'elles soient envoyées dans le réducteur (et d'arrêter simplement de lire l'entrée quand j'ai lu les 10 premières) ou doit-il être fait différemment? Est-ce que quelqu'un ici peut me diriger vers un exemple de code que je peux consulter?
Mise à jour: je l'ai trouvé deux JIRA intéressantes HADOOP-485 et HADOOP-686.
Quelqu'un a un fragment de code sur la façon de l'utiliser dans l'API Hadoop 0.20?
Hmm, pour autant que je comprends le combinateur est destiné à être un « réducteur partiel qui est en cours d'exécution sur un nœud spécifique ». Je ne peux pas tronquer les résultats à ce moment parce que je ne connais pas encore la «qualité» totale des valeurs à ce moment-là. –
Mise à jour: suggestion intéressante. Le faire de cette façon (combiner des sous-ensembles déjà tronqués) produira en général une sortie différente de la façon «exacte» de le faire. Et cela peut juste être assez bon pour ma situation. Je vais le considérer. Merci. –
Pourriez-vous expliquer pourquoi cela peut entraîner une sortie différente? Je pense que les 10 premiers éléments sont définitivement inclus dans l'ensemble des 10 meilleurs éléments de chaque partition (éventuellement dans le top 3 de l'un, le top 2 d'un autre, et le top 5 d'un tiers - mais ils sont là). – SquareCog