GraphFrames检测独占出站关系



在我的图中,我需要检测没有入站关系的顶点。使用下面的示例,"a"是唯一一个和任何人都不相关的节点。

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

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

感谢

不幸的是,这种方法并不简单,因为graph.degress、graph.inDegrees、graph.outDegrees函数不会返回具有0条边的顶点。(请参阅Scala文档,Python也是如此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|
+---+--------+---------+

相关内容

  • 没有找到相关文章

最新更新