java.lang.Exception: java.lang.NumberFormatException: empty String
at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at date2021_11_27_4.MyMapper.map(MyMapper.java:33)
at date2021_11_27_4.MyMapper.map(MyMapper.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
这个异常说的很明确哪一行有错,这个是因为传过来的数据中有null 或者 ""
我的就是 commodity.setCustomerID(Double.parseDouble(strs[strs.length-2])); 这一行
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
// TODO Auto-generated method stub
String[] strs = value.toString().split(",");
text.set(strs[strs.length-1]);
commodity.setCountry(strs[strs.length-1]);
commodity.setCustomerID(Double.parseDouble(strs[strs.length-2]));
context.write(text, i);
}
需要在报错的 commodity.setCustomerID(Double.parseDouble(strs[strs.length-2])); 这一行捕捉一个异常
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
// TODO Auto-generated method stub
String[] strs = value.toString().split(",");
text.set(strs[strs.length-1]);
commodity.setCountry(strs[strs.length-1]);
//捕捉异常
try {
commodity.setCustomerID(Double.parseDouble(strs[strs.length-2]));
}catch (Exception e) {
// TODO: handle exception
commodity.setCustomerID(0);
}
context.write(text, i);
}
这样如果碰到那个数据格式异常就会把数据设置成0