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("\t"); 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("\t"); newKey.set(arr[0]+" ");//把key增加“ “一个空格字符,使得结果之间有间距 int click = Integer.parseInt(arr[1]); context.write(newKey, new IntWritable(click)); } }
本文探讨了MapReduce处理文本文件时遇到空行导致的问题,并提供了一种解决方案,通过增加控制语句避免空行被写入,确保reduce阶段正常运行。

5341

被折叠的 条评论
为什么被折叠?



