gpt4 book ai didi

scala - 删除 GraphX 中没有出边的顶点

转载 作者:行者123 更新时间:2023-12-05 04:06:05 25 4
gpt4 key购买 nike

我有一个大图(几百万个顶点和边)。我想删除所有没有出边的顶点(和边)。我有一些有效的代码,但速度很慢,我需要多次执行。我确信我可以使用一些现有的 GraphX 方法来使其更快。

这是我的代码。

val users: RDD[(VertexId, String)] = sc.parallelize(Array((1L, "1"), (2L, "2"), (3L, "3"), (4L, "4")))
val relationships: RDD[Edge[Double]] = sc.parallelize(
Array(
Edge(1L, 3L, 500.0),
Edge(3L, 2L, 400.0),
Edge(2L, 1L, 600.0),
Edge(3L, 1L, 200.0),
Edge(2L, 4L, 200.0),
Edge(3L, 4L, 500.0)
))

val graph = org.apache.spark.graphx.Graph(users, relationships)

val lst = graph.outDegrees.map(x => x._1).collect
var set:scala.collection.mutable.HashSet[Long] = new scala.collection.mutable.HashSet()
for(a<- lst) {set.add(a)}
var subg = graph.subgraph(vpred = (id, attr) => set.contains(id))
//since vertex 4 has no outgoing edges, subg.edges should return 4 and subg.vertices = 3

我不知道还有什么方法可以实现。感谢您的帮助!

编辑:我可以用 HashSet 做到这一点,但我认为它仍然可以改进。

最佳答案

您可以直接使用过滤后的顶点定义另一个图。像这样:

val lst = graph.outDegrees.map(x => x._1).collect
var graph2 = Graph(graph.vertices.filter(v => lst.contains(v)), graph.edges)

关于scala - 删除 GraphX 中没有出边的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50346748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com