Tri par valeur dans Hadoop à partir d'un fichier
J'ai un fichier contenant une Chaîne de caractères, puis un espace, puis un certain nombre sur chaque ligne.
Exemple:
Line1: Word 2
Line2 : Word1 8
Line3: Word2 1
J'ai besoin de trier le numéro dans l'ordre décroissant, et puis mettre le résultat dans un fichier assigner un rang pour le nombre. Donc ma sortie doit être un fichier contenant le format suivant:
Line1: Word1 8 1
Line2: Word 2 2
Line3: Word2 1 3
Quelqu'un a une idée, comment puis-je le faire dans Hadoop?
Je suis à l'aide de java avec Hadoop.
OriginalL'auteur Deepika Sethi | 2011-11-27
Vous devez vous connecter pour publier un commentaire.
Vous pourriez organiser votre map/reduce calcul comme ceci:
Carte d'entrée: par défaut
Sortie de carte: "la clé: numéro de valeur: le mot"
_ phase de tri sélectif par clé _
Ici, vous aurez besoin de remplacer la valeur par défaut trieur pour trier dans l'ordre décroissant.
Réduire - 1 réducteur de
Réduire d'entrée: "la clé: numéro de valeur: le mot"
De réduire la production: "la clé: word, valeur: (numéro, grade)"
Garder un compteur global. Pour chaque paire clé-valeur ajouter le rang en incrémentant le compteur.
Modifier: Voici un code ciselée d'une coutume descendant trieur:
N'oubliez pas de fait le définir comme le comparateur pour votre travail:
En utilisant un Réducteur n'est pas pratique pour le big data. Les touches d'entrée doivent être divisés en gammes et d'un personnalisé programme de partitionnement utilisé. Voir Yahoo TeraSort PDF pour plus de détails. Le Code est dans le org.apache.hadoop.des exemples.terasort le paquet. Les clés envoyées pour les réducteurs sont déjà triés. D'Offres D'Emploi.setSortComparatorClass ou si vous utilisez Writables remplacer WritableComparable#compareTo pour un tri personnalisé.
Sethi: j'ai fait un montage avec un peu de code.
Merci beaucoup, je vais travailler sur ça....
J'ai essayé d'utiliser le code ci-dessus que vous avez donné à moi dans mon programme, mais il me donne l'exception suivante: java.nio.BufferUnderflowException à java.nio.De la mémoire tampon.nextGetIndex(Tampon.java:497) à java.nio.HeapByteBuffer.getInt(HeapByteBuffer.java:355) at org.myorg.RankAssign$IntComparator.comparer(nombre de mots.java:83) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.comparer(MapTask.java:942) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.comparer(MapTask.java:942) at org.apache.hadoop.util.QuickSort.fix(QuickSort.java:30) avez-vous une idée sur ce point?
OriginalL'auteur Tudor
Hadoop Streaming - Hadoop 1.0.x
Selon cette, après la
vous ajoutez un comparateur de
-D mapred.de sortie.clé.comparateur.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator
vous spécifiez le type de tri que vous voulez
-D mapred.texte.clé.comparateur.options=-[ options]
où les [ options] sont similaires à Unix tri. Voici quelques exemples,
Ordre inverse
De tri sur des valeurs numériques
De tri sur la valeur ou quel que soit le domaine
avec le k-drapeau, vous spécifiez la clé de tri. X, y, paramètres de définir cette clé. Donc, si vous avez une ligne avec plus d'un jetons, vous pouvez choisir le jeton de tous sera la clé de tri ou de la combinaison de jetons sera la clé de tri. Voir les références pour plus de détails et d'exemples.
OriginalL'auteur vpap
J'ai trouvé la solution à ce problème. C'était simple en fait.
Pour le tri par valeur, vous devez utiliser
Pour le tri dans l'ordre décroissant, vous devez utiliser
setSortComparatorClass(LongWritable.DecreasingComparator.class);
Pour le classement, vous devez utiliser
Counter class
,getCounter
etincrement
fonction.OriginalL'auteur Deepika Sethi