向MapReduce转换:形成推荐
2016-02-22 15:00
148 查看
<strong><span style="font-size:18px;">/*** * @author YangXin * @info 向MapReduce转换:形成推荐 ,处理来自向量的推荐结果。 */ package unitSix; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.PriorityQueue; import java.util.Queue; import org.apache.hadoop.mapreduce.Reducer; import org.apache.mahout.cf.taste.hadoop.RecommendedItemsWritable; import org.apache.mahout.cf.taste.impl.recommender.ByValueRecommendedItemComparator; import org.apache.mahout.cf.taste.impl.recommender.GenericRecommendedItem; import org.apache.mahout.cf.taste.recommender.RecommendedItem; import org.apache.mahout.math.VarLongWritable; import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; import org.apache.mahout.math.map.OpenIntLongHashMap; public class AggregateAndRecommendReducer extends Reducer<VarLongWritable, VectorWritable, VarLongWritable, RecommendedItemsWritable>{ public void reduce(VarLongWritable key, Iterable<VectorWritable> values, Context context) throws IOException, InterruptedException{ int recommendationsPerUser = 10; OpenIntLongHashMap indexItemIDMap = null; Vector recommendationVector = null; for(VectorWritable vectorWritable : values){ recommendationVector = recommendationVector == null ? vectorWritable.get() : recommendationVector.plus(vectorWritable.get()); } Queue<RecommendedItem> topItems = new PriorityQueue<RecommendedItem>(recommendationsPerUser + 1, Collections.reverseOrder(ByValueRecommendedItemComparator.getInstance())); Iterator<Vector.Element> recommendationVectorIterator = recommendationVector.nonZeroes().iterator(); while(recommendationVectorIterator.hasNext()){ Vector.Element element = recommendationVectorIterator.next(); int index = element.index(); float value = (float)element.get(); if(topItems.size() < recommendationsPerUser){ topItems.add(new GenericRecommendedItem(indexItemIDMap.get(index), value)); }else if(value > topItems.peek().getValue()){ topItems.add(new GenericRecommendedItem(indexItemIDMap.get(index), value)); topItems.poll(); } } List<RecommendedItem> recommendations = new ArrayList<RecommendedItem>(topItems.size()); recommendations.addAll(topItems); Collections.sort(recommendations, ByValueRecommendedItemComparator.getInstance()); context.write(key, new RecommendedItemsWritable(recommendations)); } } </span></strong>
相关文章推荐
- httpd配置文件中重写函数Rewrite
- 全面解析Bootstrap布局组件应用
- Linux网络设备phy
- 排序算法总结
- 科大Linux内核分析之实验一
- properties文件的存取与Map键值对排序【按照value进行排序】
- js运算符优先级
- MySQL中备份的几种方式
- 阿里2015 在线笔试
- iOS开发 https协议后获取信息失败
- 禁止网页右键查看源代码
- python学习笔记
- kafka 及 kafka-Manager问题记录
- 修饰符的概述和总结
- tableViewiew的多余的行以及分割线
- 用两个栈实现一个队列
- STAR法则
- 大话设计模式-装饰模式
- iOS 从真机中拿取文件
- [Jmeter系列]Jmeter源码编译步骤(转)