首页 > 解决方案 > Spark GraphX 的 DFS 性能与简单的 Java DFS 实现

问题描述

考虑一个具有 14,000 个顶点和 14,000 个边的图,我想知道为什么 GraphX 比图的 java 实现花费更多的时间来获取从顶点到叶子的所有路径?

java实现:几秒钟

Graphx 实现:几分钟

spark GraphX 真的适合这种处理方式吗?

我的系统:i5-7500 @3.40GHz,8GB RAM

pregel的算法:

val sourceId: VertexId = 42 // The ultimate source
  // Initialize the graph such that all vertices except the root have canReach = false.
  val initialGraph: Graph[Boolean, Double]  = graph.mapVertices((id, _) => id == sourceId)
  val sssp = initialGraph.pregel(false)(
    (id, canReach, newCanReach) => canReach || newCanReach, // Vertex Program
    triplet => {  // Send Message
      if (triplet.srcAttr && !triplet.dstAttr) {
        Iterator((triplet.dstId, true))
      } else {
        Iterator.empty
      }
    },
    (a, b) => a || b // Merge Message

标签: javascalaapache-sparkspark-graphx

解决方案


我在 Graphx 上实现一些算法时发生了这种情况,我相信 GraphX 非常适合分布式环境,当您将大图拆分到多台机器上时。但是现在当你说你使用一个节点时,你检查过使用的工人数量吗?执行者人数?每个执行程序使用的内存量?这些配置参数在提高或降低 GraphX 应用程序的性能方面肯定起着重要作用。


推荐阅读