实验背景
图的三角形计数问题是一个基本的图计算问题,是很多复杂网络分析(比如社交网络分析)的基础。目前图的三角形计数问题已经成为了Spark 系统中GraphX 图计算库所提供的一个算法级API。本次实验任务就是要在Hadoop 系统上实现Twitter 社交网络图的三角形计数任务。
有向图转化为无向图
如下图所示,社交网络中的关注关系一般为有向图,这里需要转化为无向图。转化思路为:如果IF (A->B) or (B->A) THEN A-B。只要A与B在有向图中存在一条有向边,便认为A与B在无向图中存在边。
在具体实现中我们用邻接表来记录无向图。图中每个节点用long值来表示的。在邻接表中我们设置:
如果A-B & A < B,则将B加入A的邻接表;
如果A-B & B < A,则将A加入B的邻接表;
这样得到的邻接表中A : linkNode1, linkNode2, linkNode3,…记录与A节点相邻的节点,并且A < min(linkNode1, linkNode2, …)也即A的邻接表中记录的节点,标志它们long值都比A的long值要大。
从关系表中寻找三角关系
对于一个三角关系A,B,C,我们需要寻找到A-B,B-C,C-A才能确认一个三角关系是否存在。从中可以发现节点A需要同时对应A-B以及A-C。所以想到的思路如下:
对于邻接表中的A:node1,node2,…,nodek,A-node1以及A-node