spark graphX求最短路径以及中间结点
2015-11-26 17:49
225 查看
老外论坛找了一个最短路径的代码,并保存中间节点,分享一下
import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.graphx.{EdgeDirection, VertexId, Graph} import org.apache.spark.graphx.util.GraphGenerators object Pregel_SSSP { def main(args: Array[String]) { val conf = new SparkConf().setAppName("Pregel_SSSP") val sc = new SparkContext(conf) // A graph with edge attributes containing distances val graph: Graph[Long, Double] = GraphGenerators.logNormalGraph(sc, numVertices = 5).mapEdges(e => e.attr.toDouble) graph.edges.foreach(println) val sourceId: VertexId = 0 // The ultimate source // Initialize the graph such that all vertices except the root have distance infinity. val initialGraph : Graph[(Double, List[VertexId]), Double] = graph.mapVertices((id, _) => if (id == sourceId) (0.0, List[VertexId](sourceId)) else (Double.PositiveInfinity, List[VertexId]())) val sssp = initialGraph.pregel((Double.PositiveInfinity, List[VertexId]()), Int.MaxValue, EdgeDirection.Out)( // Vertex Program (id, dist, newDist) => if (dist._1 < newDist._1) dist else newDist, // Send Message triplet => { if (triplet.srcAttr._1 < triplet.dstAttr._1 - triplet.attr ) { Iterator((triplet.dstId, (triplet.srcAttr._1 + triplet.attr , triplet.srcAttr._2 :+ triplet.dstId))) } else { Iterator.empty } }, //Merge Message (a, b) => if (a._1 < b._1) a else b) println(sssp.vertices.collect.mkString("\n")) } }
相关文章推荐
- 如何优化编码速度
- 代理模式
- mac下Tomcat的安装
- java实现数据库连接池
- Gson使用
- php http
- 关于tableView的复用
- Spring MVC(一)登陆界面获取用户名和密码并跳转其它页面
- c#项目遇到的问题及解决(1)
- 转:Gerrit 学习
- 返回上一页并刷新与返回不刷新代码
- 代理,动态代理
- linux下bluetooth编程(六)L2CAP层编程实例
- 浅析if __name__=='__main__'
- Linux系统自启动脚
- 获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。
- 正则表达式30分钟入门教程
- 单个angular页面只会加载第一个ng-app
- 究极!ThinkPHP 3.2.2 框架源码逐行分析(一)
- 秒杀多线程第七篇---经典线程同步 互斥量Mutex