Как использовать значение IntWritable в качестве условия для разделения данных?

#java #hadoop-partitioning

#java #hadoop-разделение

Вопрос:

Я хочу использовать значение IntWritable в качестве условия для разделения данных. Но, похоже, Partitioner () не может получить значение.

 public static class GroupMapper extends Mapper<Object, Text, Text, IntWritable>
{               
    public void map(Object index, Text value, Context context) throws IOException, InterruptedException 
    {
        String[] words=value.toString().split(" ");
        for(int i=0;i<words.length-1;i  ) 
        {
            context.write(new Text(words[i]), new IntWritable(Integer.parseInt(words[words.length-1])));            
        }   
    }

}

public static class RatingPartitioner extends Partitioner<Text, IntWritable>
{
    public int getPartition(Text key, IntWritable value, int numReduceTasks)
    {  
        int group=value.get();
        if(numReduceTasks==0) {return 0;}
        else if(group==1) {return 0;}
        else if(group==2) {return 1;}
        else if(group==3) {return 2;}
        else {return 3;}
    }
 }
  

Когда я запускаю код. Java показывает исключение NullPointerException. Как я могу исправить код?

Ответ №1:

Возможны 3 вещи, но поскольку у меня нет кода, который запускает эти функции, я также назову их все XD:

В первой функции :

 the parameter 'value' is null and it causes a NullPointerException when 
trying to do : value.toString

the parameter 'context' is null and it causes a NullPointerException 
when trying to do : context.write
  

Во второй функции :

 the parameter 'value' is null and it causes a NullPointerException when 
trying to do : value.get()