-4

我做了一个 MapReduce 程序,它在 reduce 端连接两个表。我在小文件上尝试过它并且它有效。但是,当我尝试在大文件(80GB 和 60GB)上执行我的程序时,它会在以下行出现 IndexOutOfBoundsException 失败: if (!(fields[8]).equals("")){ 和 parse(record.toString());

private String BAN;
    public void parse(String record) {
        String[] fields = record.split("\\|");
            if (fields.length > 100) {
               if (!(fields[0]).equals("")){            
                BAN = fields[0];
               }
            }
            else if(fields.length<40 && fields.length>0){
                if (!(fields[8]).equals("")){
                    System.err.println("element = "+fields[8]);
            }
      } 

    }
    public void parse(Text record) {
        parse(record.toString());
    }

    public String getStationId(){
        return "BAN = "+BAN;

    }

我知道这个异常意味着数组中没有第 9 个元素,但我不明白为什么......而且调试这样的程序非常困难

请帮帮我!

4

2 回答 2

0

在以下代码片段中

        else if(fields.length<40 && fields.length>0){
            if (!(fields[8]).equals("")){
                System.err.println("element = "+fields[8]);
        }

如果字段的长度是 3 仍然条件为真,那么现在,您正在尝试获取第 8 个位置的元素。不是原因。

于 2012-12-27T09:08:36.493 回答
0

为了安全起见,试试这个。

if (fields.length >8 && !(fields[8]).equals("")){

或者正如@VallabhPatade 建议的那样,将之前的 if 更改为

else if(fields.length<40 && fields.length>8){ 

如果不是这种情况,则出错以追踪恶作剧记录

于 2012-12-27T09:09:21.163 回答