头歌:Spark GraphX—探求交际媒体中的“影响力用户”

打印 上一主题 下一主题

主题 887|帖子 887|积分 2661

第1关:认识Pregel API


简介



Spark GraphX中提供了方便开发者的基于谷歌Pregel API的迭代算法,因此可以用Pregel的计算框架来处理Spark上的图数据。GraphX的Pregel API提供了一个简明的函数式算法设计,用它可以在图中方便的迭代计算,如最短路径、关键路径、n度关系等,也可以通过对一些内部数据集的缓存和开释缓存操作来提拔性能。
任务描述



本关任务:利用pregel函数找到图1中距离Ann最远的顶点。

相关知识



Pregel API
在Pregel计算模式中,输入是一个有向图,该有向图的每一个顶点都有一个相应的独一无二的顶点ID。每一个顶点都有一些属性,这些属性可以被修改,其初始值由用户界说。每一条有向边都和其源顶点关联,并且也拥有一些用户界说的属性和值,并同时还记录了其目标顶点的ID。
Pregel运算实行一系列的超步(superstep),每一个超步就是一轮单独的迭代。在每个超步内部,每个顶点的计算都是并行的,每个顶点会吸收到它的邻人们在上一轮超步发送的消息的总和,然后计算顶点属性的新值;别的,在超步迭代的最后一步, 每个顶点也会给它的邻人们发送消息。顶点也可以选择不发送消息;假如目标顶点没有从它的源顶点收到任何消息,它就不会参与下一个超步的运算。当没有消息发送时或是当前迭代次数大于默认迭代次数时,Pregel运算符终止迭代并返回一个新的图。
Pregel函数界说如下:

  1. def pregel[A]
  2.          (initialMsg: A,
  3.           maxIter: Int = Int.MaxValue,
  4.           activeDir: EdgeDirection = EdgeDirection.Out)
  5.          (vprog: (VertexId, VD, A) => VD,
  6.           sendMsg: EdgeTriplet[VD, ED] => Iterator[(VertexId, A)],
  7.           mergeMsg: (A, A) => A)
  8.          : Graph[VD, ED]
复制代码

核心部分是三个函数:



(1)节点处理消息的函数vprog: (VertexId, VD, A) => VD
用户自界说的函数,运行于每个节点上,和输入消息进行计算,生成新的顶点值,在第一次迭代时,vprog在每个顶点上都实行一次,和默认输入消息进行计算,在之后的迭代时,vprog只会在吸收到消息的顶点上实行。
(2)节点发送消息的函数sendMsg: EdgeTriplet[VD, ED] =>Iterator[(VertexId,A)]
用户自界说的函数,运行于每个活跃的边三元组上,产生发送给下一次迭代的消息。
(3)消息合并函数mergeMsg: (A, A) => A)
用户自界说的函数,用于将两条发送给顶点的消息合并为一条消息。
第一个参数列表中的参数是完成一些设置工

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表