• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何获取Spark Graphx中常用边的数量?

scala 来源:Al Jenssen 6次浏览

举例来说,如果我有两个图形与顶点和边是这样的:如何获取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编程。

===========解决方案如下:

假设你有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)