MapReduce之统计和列出大图中的所有三角形
什么是三角形
图作为一个数据结构,包括一个有限的节点集,称为顶点。包括一个有限的线集,称为边,边会连接其中一些或全部节点。令T=(a,b,c)是图G中三个不同节点构成的一个集合,如果其中两个节点相连(a,b),(a,c),T就是一个三联体,如果所有三个节点都相连(a,b),(a,c),(b,c),这就是一个三角形
三角形的意义
在图论分析中,有三个很重要的度量参数:
- 全局集聚系数
- 传递比,即
T(G)=(互连的顶点三联体个数)3×(图中三角形个数)
- 局部集聚系数
要为一个大图计算这3个度量参数,必须要统计出图中三角形个数,在社交图中也具有广泛应用。
MapReduce解决方案
这个方案分为如下三步:
-
1、生成经过u的长度为2的路径,并复制从u出发的所有边作为键。如下所示
mapper: (k,v)→{(k,v),(v,k)}
reducer:{(k,v1),(k,v2),…,(k,vn)}→{[(v1,v2),(k)],[(v1,v3),(k)},…[(vn−1,vn),(k)],[(k,v1),(−)][(k,v2),(−)]…[(k,vn),(−)]
-
2、判断三角形,表示为{{u,v},{v,w},{w,u}},通过以下过程实现:
mapper: [(u,v),(w)]→[(u,v),(w)]
reducer:{[(u,v),(−)],[(u,v),(w1)],…,[(u,v),(wn)]→{[(u,v,w1)],…,[(u,v,wn)]}
reducer:{[(u,v),(−)],[(u,v),(w1)],…,[(u,v),(wn)]→NoOutPwt}
- 3、删除重复的三角形[(a,b,c)等同于(a,c,b),如下所示
mapper: (k,v)→(sort(k),v)
reducer: {(k,v1,),(k,v2),…}→{(k,null)}}
在下一篇博客中,将详细展示详细代码