根据输出信息,可以看出Mapper阶段没有输出任何记录,可能是因为读取的数据格式不正确或者切分后的字段数量不正确。建议在Mapper类中加入日志输出来调试代码:
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] fields = line.split("\t");
// 检查使用数量是否为数字
try {
int count = Integer.parseInt(fields[10]);
// 获取时间
String timeStr = fields[1];
// 将日期时间字符串转换为Date对象,并提取小时数
Date date = formatter.parse(timeStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (hour >= 12 && hour <= 15) { // 判断是否在12点到15点之间
time.set(fields[1]);
context.write(time, new IntWritable(count));
System.out.println("Mapper Output: " + time.toString() + "\t" + count);
}
} catch (NumberFormatException e) {
return;
} catch (ParseException e) {
return;
}
}
运行程序后,在控制台中查看输出结果,如果没有输出,则说明读取的数据格式或者切分后的字段数量有问题,需要进一步检查数据文件格式和Map函数实现。




