Spark GraphX——pregel案例:求最短路径、求最小值

一、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

三、案例分析

  1. 求最短路径
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值