[size=medium]hadoop涉及文件编码时,统一用UTF-8,但是当读取带有BOM的文件时,第一条数据由于包含BOM,hadoop并没有去掉,因此第一条数据处理结果总是出现误差,为了解决此问题,只需将BOM从map阶段去掉即可,如下代码:[/size]
protected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {
byte[] bytes = value.getBytes();
if(bytes!=null && bytes.length>2 && bytes[0]==(byte)0xEF && bytes[1]==(byte)0xBB && bytes[2]==(byte)0xBF){
value = new Text(Arrays.copyOfRange(bytes, 3, bytes.length)); // 去掉BOM
}
...
}