Как использовать значение IntWritable в качестве условия для разделения данных? - PullRequest
0 голосов
/ 27 марта 2019

Я хочу использовать значение 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 Ответ

0 голосов
/ 07 мая 2019

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...