Я пытаюсь запустить код 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. Любая помощь будет оценена. Спасибо!