Hadoop失败错误:java.lang.ArrayIndexOutOfBoundsException:5

Hadoop失败错误:java.lang.ArrayIndexOutOfBoundsException:5,java,hadoop,Java,Hadoop,我正在使用Hadoop MapReduce计算每年的最小值和最大值,但是当我运行程序时,我得到了错误:失败错误:java.lang.ArrayIndexOutOfBoundsException:5 我认为这是因为我的数据中有空值,因为当没有空值时程序运行良好 因此,在我的map函数中,我编写if语句来检查是否有头以及是否有空值: public static class ExposureMapper extends Mapper<Object, Text, Text, Mi

我正在使用Hadoop MapReduce计算每年的最小值和最大值,但是当我运行程序时,我得到了错误:
失败错误:java.lang.ArrayIndexOutOfBoundsException:5

我认为这是因为我的数据中有空值,因为当没有空值时程序运行良好

因此,在我的map函数中,我编写if语句来检查是否有头以及是否有空值:

 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();
        }
    }
如果
value.toString().split(“,”)
has少于六个元素,
solarFields[5]
将不是元素,因此您将看到
ArrayIndexOutOfBoundsException

创建
solarFields
后,应立即检查其长度:

if (solarFields == null || solarFields.length < 6) {
    return;
}

堆栈跟踪将非常有用。您还应该使用
value.toString().isEmpty
检查空值。添加要拆分的字符串。我的猜测是没有你想象的那么多结果@MilanDesai我尝试value.toString()。我是空的,但不起作用:(@Micromuncher)添加要拆分的字符串是什么意思?谢谢。请发布stacktrace。这会让我们了解您在哪一点看到ArrayIndexOutOfBoundsException
if (solarFields == null || solarFields.length < 6) {
    return;
}
Double exposure;
try {
    exposure = Double.parseDouble(solarFields[5]);
} catch (NumberFormatException e) {
    return;
}