Я тестирование 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» и прерывается.
Другой вопрос: Графические рамки направлены, не так ли? Чтобы получить «непрямый граф», я должен добавить обратные ребра, не так ли?
Daniel, вы можете помочь мне понять этот оператор 'toExpr (" name <> 'Esther' ")', я не пользователь scala, но я использую графические рамки в python. Я понимаю ваше fromexpression –
Это SQL-сигнал. Я также тестировал с «! =» И «NOT LIKE» вместо «<>». – Daniel