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



我有一个如下的文本文件:

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)

相关内容

  • 没有找到相关文章

最新更新