0

在我的图中,我需要检测没有入站关系的顶点。使用下面的示例,“a”是唯一不被任何人关联的节点。

a -->  b
b -->  c
c -->  d
c -->  b

我真的很感激在我的图中检测“a”类型节点的任何示例。

谢谢

4

1 回答 1

0

不幸的是,该方法并不简单,因为 graph.degress、graph.inDegrees、graph.outDegrees 函数没有返回具有 0 边的顶点。(请参阅适用于 Python 的 Scala 文档https://graphframes.github.io/graphframes/docs/_site/api/scala/index.html#org.graphframes.GraphFrame

所以下面的代码总是会返回一个空的数据框

g=Graph(vertices,edges)

# check for start points 
g.inDegrees.filter("inDegree==0").show()
+---+--------+
| id|inDegree|
+---+--------+
+---+--------+

# or check for end points 
g.outDegrees.filter("outDegree==0").show()
+---+---------+
| id|outDegree|
+---+---------+
+---+---------+

# or check for any vertices that are alone without edge
g.degrees.filter("degree==0").show()
+---+------+
| id|degree|
+---+------+
+---+------+

有效的是 inDegree 和 outDegree 结果的左、右或完全连接,并过滤相应列的 NULL 值

连接将为您提供在开始和结束位置具有 NULL 值的合并列

g.inDegrees.join(g.outDegrees,on="id",how="full").show()

+---+--------+---------+
| id|inDegree|outDegree|
+---+--------+---------+
| b6|       1|     null|
| a3|       1|        1|
| a4|       1|     null|
| c7|       1|        1|
| b2|       1|        2|
| c9|       3|        1|
| c5|       1|        1|
| c1|    null|        1|
| c6|       1|        1|
| a2|       1|        1|
| b3|       1|        1|
| b1|    null|        1|
| c8|       3|     null|
| a1|    null|        1|
| c4|       1|        4|
| c3|       1|        1|
| b4|       1|        1|
| c2|       1|        3|
|c10|       1|     null|
| b5|       2|        1|
+---+--------+---------+

现在你可以过滤什么搜索

my_in_Degrees=g.inDegrees
my_out_Degrees=g.outDegrees

# get starting vertices (no more childs)
my_in_Degrees.join(my_out_Degrees,on="id",how="full").filter(my_in_Degrees.inDegree.isNull()).show()
+---+--------+---------+
| id|inDegree|outDegree|
+---+--------+---------+
| c1|    null|        1|
| b1|    null|        1|
| a1|    null|        1|
+---+--------+---------+


# get ending vertices (no more parents)
my_in_Degrees.join(my_out_Degrees,on="id",how="full").filter(my_out_Degrees.outDegree.isNull()).show()
+---+--------+---------+
| id|inDegree|outDegree|
+---+--------+---------+
| b6|       1|     null|
| a4|       1|     null|
|c10|       1|     null|
+---+--------+---------+

于 2019-09-04T13:46:29.207 回答