MapReducer Mapper阶段出现异常

这篇博客讨论了在Java MapReduce程序中遇到的一个常见错误:尝试将空字符串转换为Double导致NumberFormatException。作者提供了修改后的代码,通过try-catch块捕获异常,并在数据格式不正确时将值设为0,确保程序的稳定运行。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值