分享

MapReduce面试题求教

tonydu 发表于 2016-11-17 16:58:57 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 10913
1.假设hadoop中有一个商品访问日志,格式为:productid(商品编号),uid(访客编号),visittime(访问时间)。设计一个map/reduce程序,实现统计最近7天访问最频繁的前10000个访客
思路:
(1)首先按访客编号分组,统计每个访客的访问次数;
TextInputFormat 和KeyValueInputFormat 到底选哪一个??
怎么分离出uid??
k2---uid(访客编号),v2---IntWritable类型的1
(2)最近7天;
肯定和visittime有关,但是不知道怎么处理?求大神分析下
(3)Top 10000
2.假设hadoop中存在用户访问日志,日志中字段定义为:[用户编号,用户访问时间,用户方位页面链接
样例如下:
id2  2015-11-02 23:00:00  url1
id1  2015-11-03 12:30:01  url2
id1  2015-11-01 14:12:43  url3
id3  2015-11-03 08:12:23  url4
id3  2015-11-01 11:33:28  url5
id2  2015-11-04 18:12:00  url6
id2  2015-11-01 10:12:12  url7
…...
设计一个map/reduce程序,对于每个用户,将其访问过的URL按时间顺序排列输出,结果如下:
id1  url3, url2
id2  url7, url1, url6
id3 url5, url4
…..
这个用SQL解的话,还有点思路,但是很难实现。用MR没有思路啊??求大神分析下

已有(4)人评论

跳转到指定楼层
xuanxufeng 发表于 2016-11-17 19:23:32
本帖最后由 xuanxufeng 于 2016-11-17 19:24 编辑

TextInputFormat 就可以
output可以自定义。
思路:
map进行分割,reduce统计,然后输出前10000访客对于最近七天,楼主在map里可以只读取最近七天的数据,其它的可以通过时间都过滤掉

详细可以参考这个
使用mapreduce分析日志统计ip个数
http://www.aboutyun.com/forum.php?mod=viewthread&tid=20318


非常的类似,而且有代码实现,楼主简单的改下就可以了

回复

使用道具 举报

tonydu 发表于 2016-11-17 21:45:35
xuanxufeng 发表于 2016-11-17 19:23
TextInputFormat 就可以
output可以自定义。
思路:

谢谢,给了我一些思路,但是还是有些问题自己没法解决。如时间怎么过滤掉?你总得把时间字段分离出来吧。
我自己再去摸索摸索。

对了,大神,第二题能否给点思路?
回复

使用道具 举报

nextuser 发表于 2016-11-18 09:55:44
tonydu 发表于 2016-11-17 21:45
谢谢,给了我一些思路,但是还是有些问题自己没法解决。如时间怎么过滤掉?你总得把时间字段分离出来吧。 ...

第二个更简单了。
首先确定好分区函数,如果不符合自己的。就自定义个。

map处理完后,通过分区函数得到如下形式
id1 url1,url2

然后在对url1排序,这个可能都不需要排了。默认已经排好序了。

然后reduce直接输出这个结果即可

所以关键是弄懂分区函数,以及对mapreduce的理解。
回复

使用道具 举报

ggggying12 发表于 2017-2-22 18:20:31
好好学习,天天向上
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条