从文本文件中删除双向唯一行

svgewumm  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(465)

我有一个文本文件如下:

1    3
2    5
3    6
4    5
5    4
6    1
7    2

上面的文件表示无向图中的边。我想删除图中的重复边。在上面给出的例子中,我想删除 4,5 or 5,4 因为它们在图形中表示相同的边,因此会导致重复。我正在尝试使用 Graphstream 使用 GraphX apachespark中的库。但是由于存在重复节点,如上所述,它给出了如下错误

org.graphstream.graph.EdgeRejectedException: Edge 4[5--4] was rejected by node 5

从文本文件中删除这些副本的最佳方法是什么?

14ifxucb

14ifxucb1#

你可以用 convertToCanonicalEdges 方法来自 GraphOps . 它
将双向边转换为单向边。
重写边的顶点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)

相关问题