我正在测试 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 是有向的,不是吗?为了获得“无向图”,我应该添加倒数边,不是吗?