Это дополнительный вопрос Извлечение строк, содержащих определенное значение, с использованием mapReduce и 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 );
}
}
}
}
Функция редуктора
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
Что я делаю неправильно?
Что именно здесь происходит в функциях картографа и редуктора?
extends
их, порядок<KeyIn, ValueIn, KeyOut, ValueOut>
для обоих классов. Выходные пары "ключ-значение" преобразователя должны совпадать с входными ключами-значениями редуктора. - person OneCricketeer   schedule 07.05.2016void
, так что ничего не возвращается, но редюсер читает(40, [105, 105, 105])
- person OneCricketeer   schedule 07.05.2016