Graphframes:spark graphframes 中两个顶点列表之间的 BFS

问题描述 投票:0回答:1

我的目标是找出两个顶点之间的最大路径长度是否为<= 4.

我有一个图形数据框和一个以下格式的测试文件。

我正在尝试从图形数据帧的 bfs 函数获取输出列(OP)。

Col1, Col2, OP
a1,   a4,   true
a2,   a1,   false
a3,   a5,   true

目前,我正在循环每一行并应用 bfs,如下所示

gf.bfs.fromExpr("id = 'a1'").toExpr("id = 'a4'").maxPathLength(4).run()

有没有更好的方法可以直接插入源和目标处的顶点列表来计算图框中的 bfs。

apache-spark spark-graphx graphframes
1个回答
0
投票

您可以为此使用主题查找,并使用 Col1 和 Col2 将结果连接到数据框。像这样的东西:

motifs= [
      "(start)-[e1]->(end)",
      "(start)-[e1]->(n1); (n1)-[e2]->(end)",
      "(start)-[e1]->(n1); (n1)-[e2]->(n2); (n2)-[e3]->(end)",
      "(start)-[e1]->(n1); (n1)-[e2]->(n2); (n2)-[e3]->(n3); (n3)-[e4]->(end)",

for motif in motifs:
    reachable = df.join(g.find(motif),[f.col("start")==f.col("Col1"),f.col("end")==f.col("Col2")],"inner")
    unreachable = df.join(g.find(motif),[f.col("start")==f.col("Col1"),f.col("end")==f.col("Col2")],"leftanti")

在循环的每次迭代中,它将找到在 1/2/3/4 条边内可达的 Col1-Col2 对。当然,您仍然需要通过循环联合所有可到达的数据帧,并且可能对可以多种方式连接的节点进行一些重复数据删除。

© www.soinside.com 2019 - 2024. All rights reserved.