0
在GraphX中,是否有一种方法可以检索某个路径上的所有节点和圆弧,这些节点和圆弧的长度是一定的? 更具体: 我想获得从A到B的所有10个步骤路径。 对于每条路径,我想获得节点和弧的列表。GraphX - 从路径中检索所有节点
感谢
在GraphX中,是否有一种方法可以检索某个路径上的所有节点和圆弧,这些节点和圆弧的长度是一定的? 更具体: 我想获得从A到B的所有10个步骤路径。 对于每条路径,我想获得节点和弧的列表。GraphX - 从路径中检索所有节点
感谢
免责声明:这只是为了表明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]|
// +-----+---+---+-----+---+-----+---+-----+---+
你能给出一个更具体的例子?目前还不清楚你在问什么。例如,您是否试图查找属于5节点路径的所有节点?特定路径的一部分?如果您根据这些数据提供了一些示例数据以及您希望看到的结果,那么最好的办法是。 –
有没有API来做到这一点,这不是一件微不足道的事情。要解决这个问题,你需要通过图计算出所有可能的“路线”。有像'aggregateMessages'和/或'pregel'这样的API可以让你构建逻辑,但正如我所说的 - 不是一件微不足道的事情。 –
哪个环境能满足我的需求? Gremlin在Apache Spark上对Titan的评价如何?可以使用Gremlin满足我的要求吗? – Inbal