SparkGraphX加权最短路径算法实现

本文介绍了如何在 Spark 1.6 版本中使用 GraphX 实现加权最短路径算法,以解决现实生活中考虑多种因素(如距离、拥堵情况)的最短路线问题。通过初始化、迭代更新距离并标记已访问节点,计算所有节点到特定起点的最短路径。代码示例展示了数据准备、图对象生成以及最终路径结果的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本:spark 1.6
该版本自带的最短路径算法shortestPaths没办法自定义权重(默认每条边的权重都一样),不符合现实生活,比如在地图中计算两个位置的最短路线,要考虑线路的长度,线路的拥堵情况等多方面,所以写了个加权最短路径算法加入距离属性

算法说明:
加权最短路径算法计算所有的顶点到特定点的距离:
1.初始化开始顶点的距离为0,所有其他节点距离设置为无穷大
2. 将当前顶点设为初始顶点
3. 所有与当前顶点相邻的顶点,将距离设置为当前顶点的距离加上将当前顶点连接到该其他顶点的边的长度之和的较小值。
4.将当前顶点标记为已访问
5.迭代停止条件, 如果没有未访问的顶点
6.迭代第三步
代码:

 def dijkstra[VD](g:Graph[VD,Double],origin:VertexId)={
    var g2=g.mapVertices((vid,vd)=> (false,if(vid == origin) 0 else Double.MaxValue)) //修改点的属性,如果是特殊顶点属性为0,其他为无穷,false标志着是否被访问过
    //每次循环都会访问一个点并标记为true,共循环vertices.count-1次(特定节点除外)
    for(i <- 1L to g.vertices.count-1){
      val currentVertexId=
        g2.vertices.filter(!_._2._1)
            .fold((0L,(false,Double.MaxValue)))((a,b)=>
              if(a._2._2 < b._2._2)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值