我们如何在graphX图中得到具有最大权重的整个边?

时间:2016-06-27 17:43:53

标签: apache-spark max spark-graphx

我想知道如何在graphx图中获得具有最大权重(attr)的整个边缘? 例如:

| srcID | dstID | attr |
------------------------
|  3    |   7   |   2  |
------------------------
|  4    |   7   |   8  |
------------------------
|  4    |   8   |  11  |
------------------------
|  6    |   7   |   4  |

我希望从11开始返回的边缘4,8,11是最大重量

1 个答案:

答案 0 :(得分:0)

可能不是最快的,但这对我有用:

import org.apache.spark.rdd._
import org.apache.spark.graphx._
val nodes: RDD[(VertexId, String)] = sc.parallelize(Array((3L, "3"), (7L, "7"), (4L, "4"), (8L, "8"),(6L,"6")))
val vertices: RDD[Edge[Int]] = sc.parallelize(Array(Edge(3L, 7L, 2), Edge(4L, 7L, 8), Edge(4L, 8L, 11), Edge(6L, 7L, 4)))
val graph: Graph[String,Int] = Graph(nodes, vertices, "z")

graph.edges.map(e=>(e.attr,(e.srcId,e.dstId))).max
//res: (Int, (org.apache.spark.graphx.VertexId, org.apache.spark.graphx.VertexId)) = (11,(4,8))

转换图形边缘,使其位于键值对中,并将属性(权重)作为键。如果多个边具有相同的权重,我不确定这是如何表现的,但我确信可以修改代码来处理它。