MapReducer Mapper阶段出现异常

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

猜你喜欢

转载自blog.csdn.net/qq_53368181/article/details/121602303
今日推荐