我试图使用mapreduce运行排序算法,但我总是收到Array ofBound
异常
java.lang.ArrayIndexOutOfBoundsException: 6
at to.SecSortMapper.map(SecSortMapper.java:17)
at to.SecSortMapper.map(SecSortMapper.java:1)
代码
if (value.toString().length() > 0) {
String arrEmpAttributes[] = value.toString().split("\\t");
context.write(new TextPair(arrEmpAttributes[6].toString(),
(arrEmpAttributes[3].toString() + "\t" + arrEmpAttributes[2].toString() + "\t" + arrEmpAttributes[0].toString())), nullWritable.get());
}
我试图更改值字符串长度> 1,但是它不起作用,有人可以帮忙吗?
最佳答案
您假设arrEmpAttributes
至少包含7个元素,但都不是null
。这是一个冒险的假设,尤其是在大数据世界中,几乎可以保证您将处理输入数据中的某些不一致之处。
您的if
语句应如下所示:
valueStr = value.toString(); //Declare this outside of the loop for efficiency
if (!StringUtils.isEmpty(valueStr)) {
arrEmpAttributes[] = valueStr.split(TAB_SEPARATOR); //Also declare these two outside of the loop
if(!ArrayUtils.isEmpty(arrEmpAttributes) && arrEmpAttributes.length==SEVEN) {
//context.write...
}
}
关于java - 数组越界Mapreduce,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34108774/