spark的数三角形算法_spark graphx 图计算

写在前面

态度决定高度!让优秀成为一种习惯!

世界上没有什么事儿是加一次班解决不了的,如果有,就加两次!(- - -茂强)

什么是一个图

一个网络

Network

一个树

Tree

一个RDBMS

RDMBMS

一个稀疏矩阵

稀疏矩阵网络

或者

Kitchen sink

属性图

顶点

顶点

GRAPHX

graphx是一个图计算引擎,而不是一个图数据库,它可以处理像倒排索引,推荐系统,最短路径,群体检测等等

有向图与无向图

有向图无向图

有环图与无环图

两者的区别在于是否能够沿着方向构成一个闭环

有环图无环图

有标签图与无标签图

有标签无标签图

伪图与循环

从简单的图开始,当允许两个节点之间有多个边的时候,就是一个复合图,如果在某个节点上加个循环就成了伪图,GRAPHX中的图都是伪图

伪图与循环

二部图/偶图

偶图有个特殊的结构,就是所有的顶点分为两个数据集,所有的边都是建立在这两个数据集之间的,在一个数据集中不会存在边

偶图

RDF(Resource Description Framework )图与属性图

RDF图与属性图

邻接矩阵

邻接矩阵

SPARK GRAPHX

RDD

DATA IN GRAPHX

graphx中的Graph有两个RDD,一个是边RDD,一个是点RDD

其中UML如下

Graph UML

理解三元组

其实就是由(点、边,点)的一个有效组合,由triplets()接口获取

三元组

其中triplets()返回的结果是EdgeTriplet[VD,ED],EdgeTriplet[VD,ED]的属性接口有:

属性接口

理解aggregateMessages

首先看下源码:

def aggregateMessages[A: ClassTag](

sendMsg: EdgeContext[VD, ED, A] => Unit,

mergeMsg: (A, A) => A,

tripletFields: TripletFields = TripletFields.All): VertexRDD[A] = {

aggregateMessagesWithActiveSet(sendMsg, mergeMsg, tripletFields, None)

}

EdgeContext

EdgeContext

主要考虑

sendmsg

这两个方法

这两个方法一个吧triplets中数据发送到源节点

一个是把triplets中的数据发送到目的节点

这样就可以在源或者目的节点进行聚合操作了

看个例子:

graph.aggregateMessages[Int](_.sendToSrc(1), _ + _).foreach(println)

这个例子就是求出图的出度

sendToSrc(1)会针对每一个triplets向源节点发送1

如图

三元组

会向2节点发送一个1

_ + _ :表示针对每个节点做相加的聚合

比如下图5节点有4个triplets,采用sendToSrc方法后,它的聚合就是1+1 = 2

也就是它的出度

结果是

(4,1)

(3,1)

(5,3)

(2,1)

Pregel

先看源码

def apply[VD: ClassTag, ED: ClassTag, A: ClassTag]

(graph: Graph[VD, ED],

initialMsg: A,

maxIterations: Int = Int.MaxValue,

activeDirection

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值