做完Louvain社区划分后,如何找到每个社区中的重要节点?

nebula graph版本:3.3.0
nebula studio版本:3.5.0
部署方式:分布式
是否为线上版本:N

我的目的:用分布式跑社区划分,然后在每个社区中找到重要节点,并挖掘隐藏关系。
我感觉有两种方法可以尝试,一种是利用nebula algorithm,另一种用python,只不过需要转换成分布式去跑。
对于第一种方式(利用nebula algorithm):
目前,我正在用直接提交算法包的方式跑louvain社区划分算法:

spark-submit --master "local" --class com.vesoft.nebula.algorithm.Main /opt/offline/nebula/nebula-algorithm-3.0.0.jar -p /opt/offline/nebula/application.conf

我的疑问:当社区划分跑完后,我想挖掘出每个社区中的重要节点,自我感觉类似 点度中心性/中介中心性/接近中心性等。我看algorithm的application.conf配置文件中有这些算法,但是不清楚能不能在executeAlgo后面写多个执行算法?如果我写了louvain,又写了betweenness,那么会先执行louvain算法,再执行betweenness算法吗?就算执行betweenness算法,会不会在整个图中运行该算法,而不是在louvain社区划分结果基础上运行?

第二种方式(利用python):
python的networkx包中倒是有现成的betweenness方法,但是我现在不清楚怎么跑分布式 :sob:,是需要将所有python代码转换成pyspark代码吗?如果转成pyspark的话,下面这些包是否有对应的pyspark包呢?(nebula3的那些包)

第一种方法,你可以分别跑多次算法,将结果写回到nebula中 分别作为点的属性。 这样你可以通过在社区内进行中心性结果的统计,得到最重要的点。
第二种方法,pyspark 可以直接调用nebula-spark-connector,详见github 仓库的readme

我想先试试第一种方法,我需要跑完louvain之后,再修改application.conf配置文件中需要执行的算法为betweenness,对吗?在执行betweenness算法的时候,默认是在整个图中计算中介中心性吧?如何基于我划分好的社区去计算中心性呢?

是的,不支持基于划分好的社区计算中心性

这个您可以再详细说下吗?
我需要先在当前这个图上跑betweenness算法,然后通过match或fetch prop on查询语句去查询指定社区编号的节点,进而查看这些节点中的中心性属性的值,对吗?

  1. 分别跑louvain和bc,将结果写回nebula tag的属性里
  2. 通过match 去查点,指定社区编号,然后获取指定编号的社区里bc值最大的节点
1 个赞

好的好的 谢谢您!

不客气

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。