我测试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