一、Pregel API
def pregel[A] (initialMsg: A, maxIter: Int = Int.MaxValue, activeDir: EdgeDirection = EdgeDirection.Out)
(vprog: (VertexId, VD, A) => VD,
sendMsg: EdgeTriplet[VD, ED] => Iterator[(VertexId, A)],
mergeMsg: (A, A) => A) : Graph[VD, ED]
参数介绍:
参数名 | 作用 |
---|---|
initialMsg | 图初始化的时候,开始模型计算的时候,所有节点都会先收到一个消息 |
maxIter | 最大 迭代次数 |
EdgeDirection | 规定了发送消息的方向 |
vprog(VertexId,VD,A) | VertexId:节点的id必须要使用Long型的,VD:节点的值,A:传来的值。节点调用该消息将聚合后的数据和本节点进行属性的合并 |
sendMsg(EdgeTriplet) | 返回一个迭代器,迭代器里一般包含:目的地id,源节点的值和边界的值。激活态的节点调用该方法发送信息 |
mergeMsg | 如果一个节点接收到多条信息,先用mergeMsg来将多条信息聚合称为一条信息,如果节点只收到一条信息,则不调用该函数 |
二、EdgeTriplet的几个属性
- srcAttr:源节点的数据
- dstAttr:目标节点的数据
- attr:edge中的属性
- srcId:源节点的id
- dstId:目标节点的id
三、案例分析
- 求最短路径
package com.wang.spark_graph
import org.apache.spark.{
SparkConf, SparkContext}
import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD._
import org.apache.spark.rdd.RDD
object SparkpregelDemo extends App {
//1 创建SparkContext
val sparkConf = new SparkConf().setAppName("pergelDemo").setMaster("local[*]")
val sparkContext = new SparkContext(sparkConf)
//2、创建顶点
val vertexArray = Array(
(1L, ("Alice", 28