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,0,6)
推荐阅读
- postgresql - 使用ssis包删除emp表数据
- sql - 将 Sharepoint 列表转换为结构化数据库
- r - 使用csv在R中分组条形图
- excel - 一次隐藏多行,其中行中的单元格与另一个单元格匹配
- javascript - postgres:从node.js调用时表明显存在时关系不存在
- java - Spark 流在添加 JsonArray 时抛出 java.util.ConcurrentModificationException
- c# - 为什么 twilio 无法从收集命令中调用操作 url?
- node.js - 如何使用 node.js lib 更新 elasticsearch 中的项目?
- react-native - redux-persist 是否在应用更新之间持久化/保存数据?
- sql - 如何根据条件设置每行的布尔值