#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()