Я пытаюсь следовать примеру https://docs.databricks.com/spark/latest/graph-analysis/graphframes/user-guide-python.html
Однако при изменении некоторых критериев результат не соответствует ожиданиям. См. Шаги ниже -
из импорта functools уменьшить из pyspark. sql .functions import col, горит, когда из импорта графических фреймов *
vertices = sqlContext.createDataFrame([
("a", "Alice", 34),
("b", "Bob", 36),
("c", "Charlie", 30),
("d", "David", 29),
("e", "Esther", 32),
("f", "Fanny", 36),
("g", "Gabby", 60)], ["id", "name", "age"])
edges = sqlContext.createDataFrame([
("a", "b", "follow"),
("b", "c", "follow"),
("c", "b", "follow"),
("f", "c", "follow"),
("e", "f", "follow"),
("e", "d", "follow"),
("d", "a", "follow"),
("a", "e", "follow")
], ["src", "dst", "relationship"])
g = GraphFrame(vertices, edges)
Теперь одно изменение, которое я сделал в столбец «отношения», все значения - «следовать» вместо друга.
Теперь запрос ниже работает нормально -
g.bfs(fromExpr ="name = 'Alice'",toExpr = "age < 32", edgeFilter ="relationship != 'friend'" , maxPathLength = 10).show()
+--------------+--------------+---------------+--------------+----------------+
| from| e0| v1| e1| to|
+--------------+--------------+---------------+--------------+----------------+
|[a, Alice, 34]|[a, e, follow]|[e, Esther, 32]|[e, d, follow]| [d, David, 29]|
|[a, Alice, 34]|[a, b, follow]| [b, Bob, 36]|[b, c, follow]|[c, Charlie, 30]|
+--------------+--------------+---------------+--------------+----------------+
, но если я изменю критерий фильтра с 32 на 40, неправильно извлекается результат -
>>> g.bfs(fromExpr ="name = 'Alice'",toExpr = "age < 35", edgeFilter ="relationship != 'friend'" , maxPathLength = 10).show()
+--------------+--------------+
| from| to|
+--------------+--------------+
|[a, Alice, 34]|[a, Alice, 34]|
+--------------+--------------+
В идеале он должен получить аналогичный результат из первого запроса, потому что условие фильтра по-прежнему выполняется для всех строк.
Есть ли объяснение этого?