MapReduce之页面访问次数的top—n,以及访问次数全局排序实现

该博客介绍了如何使用MapReduce来计算页面访问次数的前n名以及全局排序。通过Map阶段对数据进行分割,Reduce阶段统计每个页面的访问次数,并利用PageCount类实现排序。在全局排序的实现中,通过两轮MapReduce操作,将第一次的输出作为第二次Map的输入,确保在Reduce阶段只有一个任务,并且PageCount类需要实现序列化接口以适应Hadoop的传输需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据样本:
2017/07/28 sina.com/lady/
2017/07/28 sina.com/play
2017/07/28 sina.com/movie
2017/07/28 sina.com/music
2017/07/28 sina.com/sport
2017/07/28 sina.com/sport
2017/07/28 163.com/sport

......等

#中间是空格

  • 访问次数的top-n实现

mapreduce实现,首先map对取数据进行分割,写入到context中。

package mapreduce.page_topn;

//省略各种包

public class PageTopMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

	@Override
	protected void map(LongWritable key, Text values, Context context)
			throws IOException, InterruptedException {
		String line = values.toString();
		String[] firlds = line.split(" ");
                //写入<网页,次数>
		context.write(new Text(firlds[1]), new IntWritable(1));
	}
}

reduce拿到map的<key,value>的成组数据进行统计,将PageCount类封装网页名称和次数数据,reduce task将统计的<网页,总次数>的pagecount类put到TreeMap中,在PageCount类中实现排序方法,完成之后会调用cleanup方法,对cleanup方法进行重写,遍历前n此拿到的即是网页浏览次数前n的数据。

package mapreduce.page_topn;

//省略各种包

public class PageTopReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
	
	
	TreeMap<PageCount, Object> treeMap = new TreeMap<>();
	@Override
	protected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {
		
		int count=0;
		for (IntWritable value : values) {
			count += value.get();
		}
		//将网页名称和次数封装到PageCount类中,在PageCount类中重写排序方法
		PageCount pageC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值