Отладьте код MapReduce, чтобы найти причину ошибки NULLPointerException - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь запустить код MapReduce для расчета среднего уровня удовлетворенности по отделу. Ниже приведен пример данных. В файле есть заголовки, и для удаления заголовков я поместил их в другой текстовый файл и использовал его, чтобы проверить, не равны ли значения строк заголовкам.

Пример данных satisfaction_level, last_evaluation, number_project, average_montly_hours, time_spend_company, Work_accident, слева, promotion_last_5years, продажа, зарплата

0.38,0.53,2,157,3,0,1,0, продажи, низкий 0.8,0.86,5,262,6,0,1,0, продажи, средний 0.11,0.88,7,272,4,0,1,0, продажи, средний 0.72,0.87,5,223,5,0,1,0, продажа, низкая 0.37,0.52,2,159,3,0,1,0, продажа, низкая 0.41,0.5,2,153,3,0,1,0, продажа, низкая 0.1,0.77,6,247,4,0,1,0, продажа, низкая 0.92,0.85,5,259,5,0,1,0, продажа, низкая 0.89,1,5,224,5,0,1,0, продажи, низкий

Ниже приведен код моего картографа.

public class SatisfactionLevelMapper extends Mapper<LongWritable, Text, Text, FloatWritable>
{
     String header;
 @Override
 protected void setup(Mapper.Context context) throws IOException, InterruptedException 
/* Headers are placed in a separate header.txt file for which the location is specified in the driver */
{
    BufferedReader bufferedReader = new BufferedReader(new FileReader("header.txt"));
    header = bufferedReader.readLine();

}
    public void map(LongWritable key, Text text, Context context) throws IOException, InterruptedException
{
    String row = text.toString();
    String [] values = row.trim().split(","); //dataset is a CSV file with 10 columns

    float satisfaction = 0.0f;
    String dept = null;
    try
    {
        if(values.length == 9 && header != row)
        {
            satisfaction = Float.parseFloat(values[0]);         }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    context.write(new Text(dept), new FloatWritable(satisfaction));
    }
}

Я получаю сообщение об ошибке NullPointerException, как показано ниже.

Error: java.lang.NullPointerException
    at org.apache.hadoop.io.Text.encode(Text.java:450)
    at org.apache.hadoop.io.Text.set(Text.java:198)
    at org.apache.hadoop.io.Text.<init>(Text.java:88)
    at com.df.hra.SatisfactionLevelMapper.map SatisfactionLevelMapper.java:62)
    at com.df.hra.SatisfactionLevelMapper.map(SatisfactionLevelMapper.java:1)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:784)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1642)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

Есть ли способ выяснить, какая часть моего кода имеет проблему? Я новичок в Java и пытаюсь найти способ отладки кодов MapReduce. Любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

Вы не можете инициализировать значение Text с помощью null, как вы делаете здесь (с dept). Попробуйте вместо этого использовать пустую строку ("").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...