Manupulieren Iterator in Mapreduce
Ich versuche, die Summe der angegebenen Punkte mithilfe von hadoop zu ermitteln. Das Problem besteht darin, alle Werte von einem bestimmten Schlüssel in einem einzelnen Reduzierer abzurufen. Es sieht aus wie das
Reducer:
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));
}
}
}
}
Und ich versuche, zwei Kopien der Iterator-Variablen zu erstellen, damit ich alle Werte des zweiten Iterators durchgehen kann, während ich einen einzelnen Wert vom vorherigen Iterator erhalte (zwei while-Schleifen oben), aber die beiden Iteratoren den gleichen Wert haben die ganze Zeit
Ich bin mir nicht sicher, ob dies der richtige Weg ist. Jede Hilfe wird sehr geschätzt.
Vielen Dank
Tsegay