2 longyixian longyixian 于 2014.12.11 22:40 提问

java mapreduce wordcount 统计出现次数 5C

一天时间内,每个小时内该网页有多少次访问记录,这么多访问记录中有多少个用户,如下格式:
hourid url
0 com
0 com
0 cn
0 net
输出格式类似下面:

hourid visitscount userscount
0 4 3
如果用wordcount的那种实现方法的话,都是根据key来直接累加value的,实在不知道该怎么弄,还请大神支招

有几条访问记录,visitscount就是几;userscount指的是(com,cn,net)

最后能输出是csv格式的文档就更好了

2个回答

u012913636
u012913636   2014.12.12 09:31

不知道你具体要怎么写,我给个办法,希望你能用到。
可以把每天新访问的用户都与时间都插入一张表中记录下来,第二天再去统计,并清空统计完的那天的数据。

lowanty
lowanty   2014.12.12 09:53

在记录时多记录一个数据,请求来源ip或者请求用户标识。。。统计网页访问次数依然采用wordcount。而有多少个用户访问,查看有多少ip或者用户标识就可以了。

lowanty
lowanty 回复longyixian: 你的原始数据采集是怎样做的。不是有url请求就记录吗?
3 年多之前 回复
longyixian
longyixian 回复lowanty: 我知道了,把前两行写到reduce函数上面就行了。还有个问题,要是统计每个时间段内每个url出现的次数该怎么算呢
3 年多之前 回复
longyixian
longyixian 回复lowanty: 我用的是javacsv.jar,我的CsvWriter类似下面的格式: String csvFilePath = "/usr/java/out1.csv"; CsvWriter wr =new CsvWriter(csvFilePath,',',Charset.forName("SJIS")); String[] contents = {str,Integer.toString(sum),Integer.toString(urlnum)}; wr.writeRecord(contents); wr.close();我是把它放在了reduce中,试了几次,都是只有最后一行数据,您看看该怎么弄
3 年多之前 回复
lowanty
lowanty 回复longyixian: 可以简单的处理,就是每次写之前都先读出来,然后修改再写。
3 年多之前 回复
lowanty
lowanty 你用的什么csv工具包? CsvWriter是否有修改模式。你现在应该是没错都是重新构建了一个CsvWriter对象,写入数据就行File文件操作一样,是直接覆盖的。你需要找到追加的调用方法。
3 年多之前 回复
longyixian
longyixian 嗯呢,问题已经解决了。还有个问题,我如何让内容输出到csv文件中呢,也就是保存为csv文件。 我在reduce中加入CsvWriter之后总是覆盖了原先的数据只保留一条数据。可能是 wr.close(); 的缘故,但去掉也不对。 很是纠结应该怎么处理
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!