-4

削減側で2つのテーブルを結合するMapReduceプログラムを実行しました。小さなファイルで試してみましたが、うまくいきました。しかし、大きなファイル(80GBおよび60GB)でプログラムを実行しようとすると、次の行でIndexOutOfBoundsExceptionが発生して失敗します。if(!(fields [8])。equals( "")){and 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 の場合でも条件は true であり、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 に答える