2017-07-30 68 views
1

輸入是1000:rohit:male:dev:2500ArrayIndexOutOfBoundException在映射代碼

在這方面,我要計數的男性和女性的計數。當我使用分割,分配每個性別領域減速器節目ArrayIndexOutOfBounfException:2

public class DeptEmpcountMapper extends 
     Mapper<LongWritable, Text, Text, LongWritable> { 

    @Override 
    protected void map(LongWritable key, Text value, Context context) 

      throws IOException, InterruptedException { 

     String st = value.toString(); 

     String[] field = st.split(":"); 
     String st1 = field[2]; 

     context.write(new Text(st1), new LongWritable(1)); 
    } 

} 
+1

你說的減速機拋出異常,但你已經張貼你的映射器的代碼。 – philantrovert

回答

1

你正在做危險的假設,即每輸入記錄的形式爲1000:rohit:male:dev:2500。從你的錯誤,很明顯,情況並非如此。壞數據總是需要考慮的事情。

考慮你輸入一些簡單的驗證事先:

String[] field = st.split(":"); 
if(ArrayUtils.getLength(field) == 5) { 
    String st1 = field[2]; 
    context.write(new Text(st1), new LongWritable(1)); 
} else { 
    //Consider printing "st" to see what the bad input looks like 
} 
+0

但我認爲OP已經指定輸入,特別是'1000:rohit:male:dev:2500',或者我錯誤地解釋了它。不過,有用的答案。 – philantrovert