Nano Hash - криптовалюты, майнинг, программирование

Hadoop mapreduce — сопоставление исключения NullPointerException

Мне нужно написать простую программу уменьшения карты, которая, получив в качестве входных данных ориентированный граф, представленный в виде списка ребер, создает тот же граф, в котором каждое ребро (x, y) с x> y заменяется (y, x) и в выходном графе нет повторений ребер.

INPUT
1;3 
2;1 
0;1 
3;1 
2;0 
1;1 
2;1

OUTPUT
1;3 
1;2 
0;1 
0;2 
1;1

Это код:

public class ExamGraph {



    // mapper class
    public static class MyMapper extends Mapper<LongWritable, Text, Text, NullWritable> {

        @Override
        protected void map(LongWritable key, Text value, Context context)
                throws IOException, InterruptedException {
            value = new Text( value.toString());
            String[] campi = value.toString().split(";"); 
            if (Integer.getInteger(campi[0]) > Integer.getInteger(campi[1]))
                context.write(new Text(campi[1]+";"+campi[0]), NullWritable.get());
            else context.write(new Text(campi[0]+";"+campi[1]), NullWritable.get());
        }

}

// reducer class
public static class MyReducer extends Reducer<Text, NullWritable, Text, NullWritable> {

    @Override
    protected void reduce(Text key, Iterable <NullWritable> values , Context context)
            throws IOException, InterruptedException {

        context.write(key, NullWritable.get());
    }
}


public static void main(String[] args) throws Exception {

    // create new job
    Job job = Job.getInstance(new Configuration());

    // job is based on jar containing this class
    job.setJarByClass(ExamGraph.class);

    // for logging purposes
    job.setJobName("ExamGraph");

    // set input path in HDFS
    FileInputFormat.addInputPath(job, new Path(args[0]));

    // set output path in HDFS (destination must not exist)
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    // set mapper and reducer classes
    job.setMapperClass(MyMapper.class);
    job.setReducerClass(MyReducer.class);

    // An InputFormat for plain text files.
    // Files are broken into lines. Either linefeed or carriage-return are used
    // to signal end of line. Keys are the position in the file, and values
    // are the line of text.
    job.setInputFormatClass(TextInputFormat.class);

    // set type of output keys and values for both mappers and reducers
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(NullWritable.class);

    // start job
    job.waitForCompletion(true);
}
}

Когда я запускаю файл jar, используя:

hadoop jar path/jar JOBNAME /inputlocation /outputlocation

Я получил эту ошибку:

    18/05/22 02:13:11 INFO mapreduce.Job: Task Id : attempt_1526979627085_0001_m_000000_1, Status : FAILED
    Error: java.lang.NullPointerException
at ExamGraph$MyMapper.map(ExamGraph.java:38)
    at ExamGraph$MyMapper.map(ExamGraph.java:1)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:793)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1917)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

Но я не нашел ошибку в коде.

22.05.2018

  • Какая строка дает вам исключение? 22.05.2018
  • Строка 38, но я нахожу в этом моменте ошибку, это моя вина; Я перепутал метод getInteger() с методом parseInt(). 22.05.2018

Ответы:


1

Нашел проблему, перепутал метод getInteger() с parseInt() в маппере.

22.05.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..