我測試graphframes BFS玩具例子:Graphframes BFS問題
val g: GraphFrame = examples.Graphs.friends
val paths: DataFrame = g.bfs.fromExpr("name = 'Esther'").toExpr("name <> 'Esther'").run()
結果我得到的是:
+-------------+------------+------------+
| from| e0| to|
+-------------+------------+------------+
|[e,Esther,32]|[e,f,follow]|[f,Fanny,36]|
|[e,Esther,32]|[e,d,friend]|[d,David,29]|
+-------------+------------+------------+
這是非常奇怪的,因爲芬妮與大衛也有出邊。鏈接到它們的頂點也具有輸出邊,例如,結果數據幀不僅應包含一個跳躍路徑,而且還應包含源頂點的所有路徑。
我自己創建了一個玩具圖:
1 2
2 3
3 4
4 5
當我做同樣類型的查詢:
g.bfs.fromExpr("id = 1").toExpr("id <> 1").run()
我仍然只得到一個跳鄰居。我錯過了什麼嗎?我還測試了其他運營商,如果沒有成功,就代表「不平等」。瘋狂的猜測:也許當BFS再次到達源頂點(它應該看它,但不訪問其鄰居)時,它不匹配「toExpr」表達式並中止。
另一個問題:GraphFrames是否定向,是不是?爲了得到一個「非直接圖」,我應該添加相互的邊緣,不是嗎?
丹尼爾,你能幫我理解這個語句'toExpr(「name <>'Esther'」)',我不是一個scala用戶,但我在python中使用graphframes。我瞭解你的fromexpression –
這是SQL不同的信號。我還用'!='和'NOT LIKE'而不是'<>'進行了測試。 – Daniel