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