Производительность DFS Spark GraphX ​​по сравнению с простой реализацией Java DFS

Рассматривая граф с 14 000 вершин и 14 000 ребер, мне интересно, почему GraphX ​​требует гораздо больше времени, чем реализация графа на Java, чтобы получить все пути от вершины к листу?

Реализация Java: несколько секунд

Реализация Graphx: несколько минут

Действительно ли spark GraphX ​​подходит для такого лечения?

Моя система: i5-7500 @3,40 ГГц, 8 ГБ ОЗУ

Алгоритм прегеля:

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

person DaveB    schedule 10.12.2018    source источник


Ответы (1)


Это случилось со мной при реализации некоторых алгоритмов на Graphx, я считаю, что GraphX ​​хорошо адаптирован для распределенной среды, когда у вас есть большие графы, разделенные на несколько машин. Но теперь, когда вы говорите, что используете один узел, вы проверили количество используемых рабочих? количество исполнителей? Объем памяти, используемый каждым исполнителем? Эти параметры конфигурации определенно играют важную роль в увеличении или уменьшении производительности вашего приложения GraphX.

person PhiloJunkie    schedule 10.12.2018