gpt4 book ai didi

apache-spark - GraphX - 从路径中检索所有节点

转载 作者:行者123 更新时间:2023-12-04 13:44:42 26 4
gpt4 key购买 nike

在 GraphX 中,有没有办法检索特定长度路径上的所有节点和边?

更具体地说,我想获得从 A 到 B 的所有 10 步路径。对于每条路径,我想获取节点和边的列表。

谢谢。

最佳答案

免责声明:这仅用于展示 GraphFrames 路径过滤功能。

嗯,理论上是可以的。您可以使用 GraphFrames模式来寻找路径。让我们假设您的数据如下所示:

import org.graphframes.GraphFrame

val nodes = "abcdefghij".map(c =>Tuple1(c.toString)).toDF("id")

val edges = Seq(
// Long path
("a", "b"), ("b", "c"), ("c", "d"), ("d", "e"), ("e", "f"),
// and some random nodes
("g", "h"), ("i", "j"), ("j", "i")
).toDF("src", "dst")

val gf = GraphFrame(nodes, edges)

并且您想找到至少包含 5 个节点的所有路径。

您可以构建以下路径模式:

val path = (1 to 4).map(i => s"(n$i)-[e$i]->(n${i + 1})").mkString(";")
// (n1)-[e1]->(n2);(n2)-[e2]->(n3);(n3)-[e3]->(n4);(n4)-[e4]->(n5)

并过滤表达式以避免循环:

val expr = (1 to 5).map(i => s"n$i").combinations(2).map {
case Seq(i, j) => col(i) !== col(j)
}.reduce(_ && _)

最后快速检查:

gf.find(path).where(expr).show
// +-----+---+---+-----+---+-----+---+-----+---+
// | e1| n1| n2| e2| n3| e3| n4| e4| n5|
// +-----+---+---+-----+---+-----+---+-----+---+
// |[a,b]|[a]|[b]|[b,c]|[c]|[c,d]|[d]|[d,e]|[e]|
// |[b,c]|[b]|[c]|[c,d]|[d]|[d,e]|[e]|[e,f]|[f]|
// +-----+---+---+-----+---+-----+---+-----+---+

关于apache-spark - GraphX - 从路径中检索所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417469/

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