标签:
分布式FP-tree
1.首先还是对购物篮数据进行排序,计数,假设min_sup=3.去掉支持度小于3的项。
2.按照fp-tree的画法,对第二列整理过的项建树,fcamp,fcabm,fb,cbp,fcamp,建立fp-tree如下:
3.第三列是从右向左遍历第二列,得到至某点的路径,例如,到p的路径为fcam,到m的是fca,到a的是fc,到c的是f,该过程发生在map端,购物篮数据存放在各个节点上,产生如上图所示的第三列的<k,v>
4.通过shuffle过程,发送至reducer,在reduce端很容易就发现了频繁模式
为了验证上述结果,用fp-tree挖掘频繁模式:
p:第一条路径上p计数为2,小于min_sup,则去掉所有计数为2的项(f,a,m),最右边的路径上c,p各出现1次,加上第一条路径上的p:2,c:2,最终为p:3,c:3
m:第一条路径上f2-c2-a2-m2,第二条路径f1-c1-b1-m1,过滤掉b之后,总共是f3-c3-a3-m3,最终模式是:f:3,c:3,a:3,m:3
b:挖不出任何东西
同理:
a:f:3,c:3,a:3
c:f:3,c:3
命理得证。
PFP算法瓶颈:
在reduce端,mapshuffle过后将所有数据放在了reduce端,同样很容易将reduce节点的内存撑爆
http://infolab.stanford.edu/~echang/recsys08-69.pdf给出了一种方法
1.假设分成两组G1和G2,G1包含商品c,a,p;G2包含商品f,b,m,
2.对每一个购物篮数据进行处理
第一个购物篮数据:f,c,a,m,p,分成G1,G2两组,上面的思想是根据商品映射出许多<k,v>,在这里不再根据商品映射,而是根据分组映射,第一个购物篮中,G1组,最右边的是p,则自右向左写下购物篮fcamp,这里key是G1,value是fcamp;同理G2为key时,value是fcam,即<G1,fcamp><G2,fcam>;
第二个购物篮数据:f,c,a,b,m,分成G1,G2两组,<G1,fca><G2,fcabm>
第三个购物篮数据:f,b,分成G1,G2两组,<G1,null><G2,fb>
第四个购物篮数据:c,b,p分成G1,G2两组,<G1,cbp><G2,cb>
第五个购物篮数据:c,b,p分成G1,G2两组,<G1,fcamp><G2,fcam>
过程如下图:
3.上面的<k,v>会映射到G1,G2两台机,分别重构出fp-tree
标签:
原文地址:http://www.cnblogs.com/mlj5288/p/4448950.html