我正在使用 Hadoop MapReduce 計(jì)算每年的最小值和最大值,但是當(dāng)我運(yùn)行該程序時(shí),出現(xiàn)錯(cuò)誤:FAILED Error: java.lang.ArrayIndexOutOfBoundsException: 5我認(rèn)為這是因?yàn)槲业臄?shù)據(jù)中有空值,因?yàn)楫?dāng)沒有空值時(shí)程序運(yùn)行正常。因此,在我的 map 函數(shù)中,我寫了 if 語句來檢查是否有 header 以及是否有 null 值: public static class ExposureMapper extends Mapper<Object, Text, Text, MinMaxExposure> { private Text year = new Text(); private double minexposure; private Double maxexposure; private MinMaxExposure outPut = new MinMaxExposure(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { try { //Some condition satisfying it is header if (value.toString().contains("Product")) { return; } else if(value.toString()==null) { return; } else{ } } catch (Exception e) { e.printStackTrace(); } String[] solarFields = value.toString().split(","); year.set(solarFields[2]); minexposure = Double.parseDouble(solarFields[5]); maxexposure = Double.parseDouble(solarFields[5]); try { outPut.setMinExposure(minexposure); outPut.setMaxExposure(maxexposure); context.write(year, outPut); } catch (IOException e) { e.printStackTrace(); } }但是同樣的錯(cuò)誤發(fā)生了......是不是因?yàn)関alue.toString()==null檢查空值的方法不正確?
1 回答

胡子哥哥
TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果value.toString().split(",");has 少于六個(gè)元素,solarFields[5]則不會(huì)是一個(gè)元素,因此您會(huì)看到一個(gè)ArrayIndexOutOfBoundsException.
創(chuàng)建后solarFields你應(yīng)該立即檢查它的長度:
if (solarFields == null || solarFields.length < 6) {
return;
}
您還想確保Double.parseDouble(solarFields[5]);不會(huì)拋出NumberFormatException:
Double exposure;
try {
exposure = Double.parseDouble(solarFields[5]);
} catch (NumberFormatException e) {
return;
}
添加回答
舉報(bào)
0/150
提交
取消