1.错误原因
mapreduce按行读取文本,map需要在原有基础上增加一个控制语句,使得读到空行时不执行write操作,否则reduce不接受,也无法输出到新路径。
2.解决方案
原错误代码
public void map(Object key,Text value,Context context) throws IOException, InterruptedException { String line=value.toString(); System.out.println(line); String arr[]=line.split(" "); newKey.set(arr[0]); int click=Integer.parseInt(arr[1]); context.write(newKey, new IntWritable(click)); }
更正后的代码
public void map(Object key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); System.out.println(line); if(!("".equals(line)))//增加控制语句,使得line为”“时能够停止。 { String arr[] = line.split(" "); newKey.set(arr[0]+" ");//把key增加“ “一个空格字符,使得结果之间有间距 int click = Integer.parseInt(arr[1]); context.write(newKey, new IntWritable(click)); } }