Dies ist ein Follow-up-Frage von Extracting rows containing specific value using mapReduce and hadoop
Mapper FunktionWas genau Ausgabe von Mapper und Minderer Funktion ist
public static class MapForWordCount extends Mapper<Object, Text, Text, IntWritable>{
private IntWritable saleValue = new IntWritable();
private Text rangeValue = new Text();
public void map(Object key, Text value, Context con) throws IOException, InterruptedException
{
String line = value.toString();
String[] words = line.split(",");
for(String word: words)
{
if(words[3].equals("40")){
saleValue.set(Integer.parseInt(words[0]));
rangeValue.set(words[3]);
con.write(rangeValue , saleValue);
}
}
}
}
Reducer Funktion
public static class ReduceForWordCount extends Reducer<Text, IntWritable, Text, IntWritable>
{
private IntWritable result = new IntWritable();
public void reduce(Text word, Iterable<IntWritable> values, Context con) throws IOException, InterruptedException
{
for(IntWritable value : values)
{
result.set(value.get());
con.write(word, result);
}
}
}
Ausgabe erhalten wird
40 105
40 105
40 105
40 105
EDIT 1: Aber die erwartete Ausgabe ist
40 102
40 104
40 105
Was mache ich falsch?
Was genau passiert hier in Mapper und Reducer-Funktion?
Sie schreiben Schlüssel Wert-Paare aus ... Was mehr willst du wissen? –
Danke für den Vorschlag @ cricket_007 Ich werde es auf jeden Fall versuchen ... Ich wollte eigentlich wissen, was GENAU Mapper zurück und Reducer - akzeptieren und drucken. – user6119874
Wenn Sie sie 'erweitern', lautet die Reihenfolge '' für beide Klassen. Und die Ausgabe-Schlüssel-Werte des Mappers ** müssen ** den Eingabe-Schlüssel-Werten des Reduzierers entsprechen –