我有一个如下的文本文件:
1 3
2 5
3 6
4 5
5 4
6 1
7 2
上面的文件表示无向图中的边。我想去掉图中重复的边。在上面给出的例子中,我想删除4,5 or 5,4
,因为它们在图中表示相同的边,因此导致重复。我试图使用Apache Spark中的GraphX
库使用Graphstream
从文件中可视化图形。但是由于上面解释的重复节点的存在,它给出如下错误
org.graphstream.graph.EdgeRejectedException: Edge 4[5--4] was rejected by node 5
从文本文件中删除这些重复的最好方法是什么?
您可以从GraphOps
使用convertToCanonicalEdges
方法。
- 将双向边转换为单向。
- 重写边的顶点id,使srcid小于dstIds,并合并重复的边
在你的例子中:
val graph = Graph.fromEdgeTuples(sc.parallelize(
Seq((1, 3), (2, 5), (3, 6), (4, 5), (5, 4), (6, 1), (7, 2))), -1)
graph.convertToCanonicalEdges().edges.collect.foreach(println)
与结果:Edge(3,6,1)
Edge(1,6,1)
Edge(1,3,1)
Edge(2,5,1)
Edge(2,7,1)
Edge(4,5,1)