数据挖掘--协同过滤算法,基于集合交集相似性计算的mapreduce算法设计
2015-01-21 14:58
246 查看
第一个过程程的mapreduce函数:
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; public class MapReduce extends MapperReduce{ public MapReduce(){ super(); } public void printf(List<String> list1,List<String> list2) throws IOException{ if((!list1.isEmpty()) && (!list2.isEmpty())){ Iterator<String> Iter1=list1.iterator(); while(Iter1.hasNext()){ String tmp1=Iter1.next(); Iterator<String> Iter2=list2.iterator(); while(Iter2.hasNext()){ String tmp2=Iter2.next(); WriteReducer(tmp1,tmp2); } } } } //map函数开始 public void Mapper(String key,String value) throws IOException{ //key为行偏移量,value为每一行的值 String[] count=value.split(" "); if(!count[1].trim().equals("")){ WriteMaper(count[1].trim(),count[0].trim()+" "+"1"); WriteMaper(count[1].trim(),count[0].trim()+" "+"2"); } } //map函数结束 //reduce函数开始 public void Reducer(String key,Iterator<String> value) throws IOException{ List<String> list1=new ArrayList<String>(); List<String> list2=new ArrayList<String>(); while(value.hasNext()){ String tmp=value.next(); String[] tmp1=tmp.split(" "); if(tmp1[1].equals("1")){ list1.add(tmp1[0]); }else{ list2.add(tmp1[0]); } } printf(list1,list2); } //reduce函数结束 public static void main(String[] args) throws IOException { MapReduce a=new MapReduce(); a.IterMapper(); a.IterReducer(); } }
本程序实例是:单表自连接,连接字段是 user
输入:
star1 user1
star2 user1
star3 user1
star3 user2
输出:
star1 star1
star1 star2
star1 star3
star2 star1
star2 star2
star2 star3
star3 star1
star3 star2
star3 star3
star3 star3
第二个过程程的mapreduce函数:
import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class MapReduce extends MapperReduce{ public MapReduce(){ super(); } //map函数开始 public void Mapper(String key,String value) throws IOException{ String[] content=value.split(" "); WriteMaper(content[0],content[1]); } //map函数结束 //reduce函数开始 public void Reducer(String key,Iterator<String> value) throws IOException{ List<String> list=new ArrayList<String>(); while(value.hasNext()){ list.add(value.next()); } Set<String> set = new HashSet<String>(list); Map<String,Integer> map=new HashMap<String,Integer>(); Iterator<String> IterSet=set.iterator(); while(IterSet.hasNext()){ map.put(IterSet.next(),0); } for(int i=0;i<list.size();i++){ map.put(list.get(i),map.get(list.get(i))+1); } Iterator<String> It = map.keySet().iterator(); while(It.hasNext()) { String tmp=It.next(); if(!tmp.equals(key)){ WriteReducer(key,tmp+" "+String.valueOf(((float)map.get(tmp))/map.get(key))); } } } //reduce函数结束 public static void main(String[] args) throws IOException { MapReduce a=new MapReduce(); a.IterMapper(); a.IterReducer(); } }
输入:
star1 star1
star1 star2
star1 star3
star2 star1
star2 star2
star2 star3
star3 star1
star3 star2
star3 star3
star3 star3
输出:
star1 star2 1.0
star1 star3 1.0
star2 star1 1.0
star2 star3 1.0
star3 star1 0.5
star3 star2 0.5
相关文章推荐
- Python读取PostgreSQL数据并使用基于物品的协同过滤算法计算推荐结果
- 数据挖掘之推荐系统实践--基于用户的协同过滤算法
- 基于分布式计算平台的流数据挖掘框架设计
- 论基于数据访问的集合类(Data Access Based Collection)和领域事件(Domain Event)模式
- 基于 Web 的数据挖掘
- 基于数据挖掘技术入侵检测系统研究
- [转载]基于数据挖掘技术入侵检测系统研究
- 基于空间数据库的数据挖掘技术
- 基于Hadoop的数据挖掘项目mahout的源码编译
- 基于 Web 的数据挖掘 (自动抽取用 HTML、XML 和 Java 编写的信息)
- 基于关联分析的数据挖掘在CRM中的应用
- 基于WEB的数据挖掘综述
- 基于 Web 的数据挖掘
- [数据挖掘]数据挖掘方面的资源、期刊、会议的网址集合
- 数据挖掘方面的资源网址集合
- 基于数据挖掘的IDS介绍
- 基于WEB的数据挖掘综述
- 网站的数据挖掘--用户相似性研究(一)
- [转载]基于数据挖掘的入侵检测系统设计
- 基于WEB 的数据挖掘综述