Тест MRUnit для тестирования ошибки программы карты хуп

Я пытаюсь выполнить модульное тестирование программы Mapper с помощью MRUnit (из Hadoop: исчерпывающее руководство, стр. 153, раздел: Написание модульного теста с помощью MRUnit: Mapper). Я использую Intellij Idea, и он показывает ошибку в методе

new org.apache.hadoop.mrunit.MapDriver<>().withMapper(myMapper)

В сообщении об ошибке говорится, что с Mapper (org.apache.hadoop.mapreduce.Mapper) в MapDriver нельзя применить (complexmapreduce.MaxTempMapper)

MaxTempMapper объявлен как подкласс org.apache.hadoop.mapreduce.Mapper, поэтому я не совсем уверен, что здесь не так.

Вот полные классы Mapper и Unit test

MaxTempMapper

package complexmapreduce;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

public class MaxTempMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private static final int MISSING = 9999;
    private NDCRecordParser myParser = new NDCRecordParser();

    @Override
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        myParser.parse(value);
        if (myParser.isValidTemperature()) {
            context.write(new Text(myParser.getYear()), new IntWritable(myParser.getMaxTemperature()));
        }
    }
}

MaxTempUnitTest

    package complexmapreduce;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.junit.Test;
    import java.io.IOException;

    public class MaxTempSingleLineUnitTest {

        @Test
        public void testMaxTempMapper() throws IOException {
            Text value = new Text("0029029070999991901010106004+64333+023450FM-12+000599999V0202701N015919999999N0000001N9-00781+99999102001ADDGF108991999999999999999999");
            LongWritable key = new LongWritable(0);
            MaxTempMapper myMapper = new MaxTempMapper();
            new org.apache.hadoop.mrunit.mapreduce.MapDriver<>()
                    .withMapper(myMapper)     // <<<===Error here
                    .withInput(key, value)
                    .withOutput(new Text("1901"), 
                     new IntWritable(0210))
                    .runTest();
        }
    }

Примечание: решение уже опробовано здесь, но не повезло.

Вот скриншот из Intellij

Скриншот

1 ответ

Вам нужно изменить:

new org.apache.hadoop.mrunit.mapreduce.MapDriver<>()

в

new org.apache.hadoop.mrunit.mapreduce.MapDriver<LongWritable, Text, Text, IntWritable>()

Вам нужно добавить универсальные типы, чтобы он знал, как запустить маппер.

Другие вопросы по тегам