reducer函数设计

qiaotongzxcv 2015-09-07 04:25:56
最近在做统计交通流量的问题,要求把监测点每一个小时的交通流量计算出来,key 为地点+时间(到小时),value为60个数。每一个代表相应分钟内的交通流量。我的设计思想是在Map中key为地点+时间(精确到分钟),valu为1,初始时间是精确到秒的,然后经过combiner函数将Map中相同key的value相加,接着我重写了Partitioner函数,把 地点+时间(精确到小时)相同的分配到同一个Reducer中,已便把一个小时内的流量汇集到一起,下面是我的reduce函数:
public static class IntSumReducer extends
Reducer<Text, IntWritable, Text, Text> {
private static Text word = new Text();
static Text address_Time = new Text("str");
String temp = new String();
static int[] mins = new int[60];
static List<Integer> list = new ArrayList<Integer>();
public void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int sum = 0;
String[] str = key.toString().split(";");
word.set(str[0]);
int min = Integer.parseInt(str[1]);
for(IntWritable val : values){
sum += val.get();
}
if(!address_Time.equals(word) && !address_Time.equals("str")){
long count = 0;
StringBuilder out = new StringBuilder();
for(int i = 0; i < 60;i++){
out.append(mins[i]);
out.append(";");
count += mins[i];
}
out.append(count);
context.write(address_Time, new Text(out.toString()));
mins = new int[60];
}else{
for(int i = 0; i < 60; i++){
if( i == min){
mins[i] = sum;
break;
}
}
}
address_Time = new Text(word);
}
可是最后出现的结果却是:
str 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
CAM014111#2013010100 0;0;0;0;0;0;0;0;0;0;0;0;2;2;0;0;0;0;0;0;0;0;0;0;0;3;1;0;0;1;0;0;0;0;0;1;0;2;0;0;0;1;2;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;17
CAM014111#2013010101 0;0;0;1;0;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;7
CAM014111#2013010102 0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5
CAM014111#2013010103 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1
CAM014111#2013010104 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1
CAM014111#2013010105 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;5
CAM014111#2013010106 0;0;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;1;1;0;0;1;1;0;0;0;1;2;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;2;0;1;0;17
CAM014111#2013010107 0;5;0;0;2;0;2;0;0;0;0;1;3;1;4;0;5;2;2;2;3;2;4;1;1;3;8;3;8;6;3;1;6;5;6;7;11;3;7;4;2;5;10;4;5;8;6;10;2;8;2;12;4;5;8;3;9;10;4;13;251
CAM014111#2013010108 0;6;12;5;4;13;3;6;4;5;6;3;8;2;13;4;4;12;7;6;5;7;7;6;10;3;7;7;4;10;1;4;12;6;2;4;14;3;8;12;15;8;2;9;8;5;8;5;7;7;7;7;8;9;7;8;8;4;6;9;402
不明白为什么已经if(!address_Time.equals(word) && !address_Time.equals("str"))才执行context.write(),结果还是出现了
str 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
而且,value的第一列有一些是有值的(我验证过),而结果却全是0,求各位大神来解决!!!!
...全文
93 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

20,848

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧