Удаление двунаправленных уникальных строк из текстового файла

У меня есть текстовый файл следующего вида:

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

Приведенный выше файл представляет ребра в неориентированном графе. Я хочу удалить повторяющиеся ребра на графике. В приведенном выше примере я хочу удалить либо 4,5 or 5,4, поскольку они представляют одно и то же ребро в графе и, следовательно, вызывают дублирование. Я пытаюсь визуализировать график из файла, используя Graphstream, используя библиотеку GraphX в Apache Spark. Но из-за наличия повторяющихся узлов, как описано выше, выдается следующая ошибка.

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

Как лучше всего удалить такие дубликаты из текстового файла?


person Yasir    schedule 29.10.2016    source источник


Ответы (1)


Вы можете использовать метод convertToCanonicalEdges из GraphOps. Это

  • Преобразует двунаправленные ребра в однонаправленные.
  • Переписывает идентификаторы вершин ребер, чтобы srcId были меньше, чем dstId, и объединяет повторяющиеся ребра.

В твоем случае:

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)
person zero323    schedule 29.10.2016