【大数据分析】基于Spark Graphx的图路径规划算法PathPlanning实现

本文介绍了基于Spark Graphx的PathPlanning算法,该算法利用Pregel机制在有限迭代内查找图数据中起点S到目标点T的所有路径。内容包括数据准备、节点属性定义、初始化、消息传递与合并等关键步骤的详细解析,并提供了代码示例。
摘要由CSDN通过智能技术生成

算法介绍

PathPlanning是基于 Spark Graphx 中的 Pregel 机制实现的算法。关于Pregel机制的理解可参考【大数据分析】基于Graphx的shortestpath源码解析。PathPlanning可以在有限的迭代次数内尽可能多地计算出图数据中起始点 S S S 到目标点 T T T 的所有路径。

算法解析

数据的准备

创建样例数据的代码

    val myVertices = sc.makeRDD(Array(
      (1L, "Dave"),
      (2L, "Faith"),
      (3L, "Harvey"),
      (4L, "Bob"),
      (5L, "Alice"),
      (6L, "Charlie"),
      (7L, "George"),
      (8L, "Ivy")
    ))

    val myEdges = sc.makeRDD(Array(
      Edge(7L, 1L, "friend"),
      Edge(7L, 2L, "sister"),
      Edge(7L, 6L, "friend"),
      Edge(1L, 4L, "friend"),
      Edge(4L, 1L, "brother"),
      Edge(3L, 2L, "boss"),
      Edge(2L, 3L, "client"),
      Edge(2L, 4L, "client"),
      Edge(1L, 5L, "client"),
      Edge(4L, 5L, "coworker"),
      Edge(3L, 8L, "coworker"),
      Edge(5L, 8L, "father"),
      Edge(4L, 8L, "colleague")
    ))

样例数据的示意图,我们这次的S是1L,T是8L)如下:
在这里插入图片描述

关于图算法需要思考的问题

基于Pregel机制实现的算法,一般需要考虑几个问题
(1)如何定义节点的属性结构?
(2)如何初始化节点的属性?
(3)在进行第一次迭代前,如何激活所有的节点?
(4)如何传递消息(节点状态如何变化,消息传递的方向,如何进行消息的更新)
(5)接收到多个消息如何将它们进行组合(merge)
(6)最终接收到的消息如何与当前节点的属性组合(vertex_program)

定义节点的属性类型

代码中定义了两个case class类型和一个MsgValue类型

  /**
   * @desc The path instance type including the definition of length of path and the definition of path
   */
  case class PathInstance(l: Double, p: List[VertexId])

  /**
   * @param dstId         Used to store S's ID
   * @param pathInstances An ArrayBuffer that used to store a path that combined with a list of nodes
   */
  case class MsgValue(dstId: VertexId, pathInstances: ArrayBuffer[PathInstance])
  type MsgType = Map[VertexId, MsgValue]

(1)PathInstance 代表路径实例类型,一个路径实例包含路径 p ,以及对应的路径长度 l 。
(2)MsgValue 包含两个变量,dstId

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值