从文本文件中删除双向唯一行
Removing bi-directional unique rows from text file
我有一个文本文件如下:
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,使srcIds小于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)
我有一个文本文件如下:
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,使srcIds小于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)