Это прослеживание вопрос о функции Extracting rows containing specific value using mapReduce and hadoop
MapperЧто именно выход картографа и редуктор функции
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
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);
}
}
}
Выход полученный
40 105
40 105
40 105
40 105
EDIT 1: Но Ожидаемый выход
40 102
40 104
40 105
Что я делаю неправильно?
Что именно происходит здесь в функции преобразователя и редуктора?
вы выписывая пар ключ-значение ... Что больше вы хотите знать? –
Спасибо за предложение @ cricket_007 Я определенно попробую это ... Я действительно хотел знать, ТОЧНО, что возвращает картер и редуктор - принимают и печатают. – user6119874
, когда вы «расширьте» их, порядок «» для обоих классов. И выходные значения ключа отображения ** должны совпадать с входными ключевыми значениями редуктора –