Рассматривая граф с 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