20,808
社区成员
发帖
与我相关
我的任务
分享
if(time<10.59&&time>10.00){
context.write(tablename+"10.00-10.59",user+"/t"+timespan);
}etc....
下面是别的时间段的
key以表+时间段,value访问用户+timespan,在reduce阶段 访问用户和timespan将被combin
reduce输入数据将会是:
A表10.00-10.59 auser atimespan ,a1user a1timespan
A表11.00-11.59 buser btimespan,b1user b1timespan
A表12.00-12.59 cuser ctimespan
A表13.00-13.59 duser dtimespan
etc...
reduce阶段主要算出在表+时间段条件下哪个用户最多,将timespan累加,同user的计数,同时剔出用户数少的,取出最大计数的用户
最终结果:A表 10.00-10.59 auser 17283712
mapper:
表A 1 // 表A 被访问1次
表A 1
表B 1
表A 1
表C 1
表B 1
reduce:
表A 3 // 表A总共被访问3此
表B 2
表C 1
------->表A访问最多
2.这段时间访问这张表最多的用户,以及这个用户的总时间开销。
以时间和表名(上一个MR已求出)为条件过滤出有效数据,统计所有用户访问次数及开销(访问次数和开销封装成一个对象),先统计访问次数得到“访问这张表最多的用户”,然后及时其“总时间开销”,一个MR。
mapper:
用A (1,5) // 用户A 访问1次,时间开销5秒
用A (1,2)
用B (1,7)
用A (1,3)
用C (1,7)
用B (1,2)
reduce:
用A (3,10) // 用户A访问3次,总时间开销10秒
用B (2,9)
用C (1,7)
------->用A访问最多,总时间开销10秒
2个MR搞定(当然,第二个MR也可以拆分成2个,那样的话需要3个。)