微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Scala 中加载加权图?

如何解决如何在 Scala 中加载加权图?

graphx 中似乎没有内置方法来正确加载加权图。我有一个文件,其中的列代表图形的边缘:

# source_id target_id weight
0   1   1
1   2   2
2   3   3
3   4   4
4   5   5
5   0   6

如何将其正确加载到 graphx.Graph 中?

解决方法

我不熟悉 GraphX,但这里有一种手动方法可以做到这一点。这有点难看,但无论如何它都能完成工作。我为每个顶点分配了一个属性“名称”,但您可以根据需要进行调整。

import org.apache.spark.graphx._

val input = sc.textFile("edgefile.txt")
val header = input.first()
val rdd = input.filter(row => row != header).map(_.split("   ").map(_.toLong))
val edges = rdd.map(s => Edge(s(0),s(1),s(2)))
val vertices = rdd.map(r => r(0)).union(rdd.map(r => r(1))).distinct.map(r => (r,"name"))
val graph = Graph(vertices,edges)

graph.vertices.foreach(println)
(3,name)
(1,name)
(2,name)
(0,name)
(4,name)
(5,name)

graph.edges.foreach(println)
Edge(0,1,1)
Edge(1,2,2)
Edge(2,3,3)
Edge(3,4,4)
Edge(4,5,5)
Edge(5,6)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。