2015-07-21 57 views
1

舉例來說,如果我有兩個圖形與頂點和邊是這樣的:如何獲取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,並且公共邊是:邊(1L,2L,1)和邊(2L,3L,8)共有的邊(1L,2L,1) 2L,3L,4)。

我在scala編程。

回答

1

假設你有graph1Graph(vertexRdd1, edgeRdd1))和graph2Graph(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() 
+0

謝謝了很多,它的工作! –

相關問題