Как я могу получить количество общих ребер в Spark Graphx?

Например, если у меня есть два графа с такими вершинами и ребрами:

import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD

val vertexRdd1: RDD[(VertexId, (String, Int))] = sc.parallelize(Array(
      (1L, ("a", 28)),
      (2L, ("b", 27)),
      (3L, ("c", 65))
))

val edgeRdd1: RDD[Edge[Int]] = sc.parallelize(Array(
    Edge(1L, 2L, 1),
    Edge(2L, 3L, 8)
))

val vertexRdd2: RDD[(VertexId, (String, Int))] = sc.parallelize(Array(
    (1L, ("a", 28)),
    (2L, ("b", 27)),
    (3L, ("c", 28)),
    (4L, ("d", 27)),
    (5L, ("e", 65))
))

val edgeRdd2: RDD[Edge[Int]]  = sc.parallelize(Array(
    Edge(1L, 2L, 1),
    Edge(2L, 3L, 4),
    Edge(3L, 5L, 1),
    Edge(2L, 4L, 1)
))

Как я могу получить количество общих ребер между этими двумя графами, не учитывая атрибут ребра? Таким образом, в приведенном выше примере количество общих ребер равно 2, а общие ребра: 2л, 3л, 4).

Я программирую на Скале.


person Al Jenssen    schedule 21.07.2015    source источник


Ответы (1)


Предполагая, что у вас есть graph1 (Graph(vertexRdd1, edgeRdd1)) и graph2 (Graph(vertexRdd2, edgeRdd2))), вы можете сопоставить ребра с (srcId, dstId), а затем использовать метод intersection:

val srcDst1 = graph1.edges.map(e => (e.srcId, e.dstId))
val srcDst2 = graph2.edges.map(e => (e.srcId, e.dstId))
srcDst1.intersection(srcDst2).count()
person zero323    schedule 21.07.2015