我想知道如何在graphx图中获得具有最大权重(attr)的整个边缘? 例如:
| srcID | dstID | attr |
------------------------
| 3 | 7 | 2 |
------------------------
| 4 | 7 | 8 |
------------------------
| 4 | 8 | 11 |
------------------------
| 6 | 7 | 4 |
我希望从11开始返回的边缘4,8,11是最大重量
答案 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))
转换图形边缘,使其位于键值对中,并将属性(权重)作为键。如果多个边具有相同的权重,我不确定这是如何表现的,但我确信可以修改代码来处理它。