J'essaie de trouver la somme de tous les points en utilisant hadoop, Le problème que je rencontre est d'obtenir toutes les valeurs d'une clé donnée dans un seul réducteur. Ça ressemble à ça.Manipulation de l'itérateur dans mapreduce
Réducteur:
public static class Reduce extends MapReduceBase implements
Reducer<Text, IntWritable, Text, DoubleWritable> {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, DoubleWritable> output, Reporter reporter)
throws IOException {
Text word = new Text();
Iterator<IntWritable> tr = values;
IntWritable v;
while (tr.hasNext()) {
v = tr.next();
Iterator<IntWritable> td = values;
while (td.hasNext()) {
IntWritable u = td.next();
double sum = u+v;
word.set(u + " + " + v);
output.collect(word, new DoubleWritable(sum));
}
}
}
}
Et je suis en train de créer deux copies de la variable Iterator afin que je puisse passer par toutes les valeurs du deuxième iterator alors que je reçois une valeur unique de la précédente iterator (Deux alors que les boucles ci-dessus) mais les deux itérateurs conservent la même valeur tout le temps.
Je ne sais pas si c'est la bonne façon de le faire, Toute aide est vraiment appréciée.
Merci,
Tsegay
J'essaie également de trouver un problème similaire. J'ai besoin de passer en revue les enregistrements deux fois dans la fonction de réduction. J'utilise hadoop streaming avec python et ne pas comment rembobiner l'itérateur pour les enregistrements dans le réducteur. –