nebulagraph algorithm 调用Louvain算法报错

spark版本是3.2.1,nebula-algorithm是3.0.0版本,另外我是通过下面命令进入spark-shell

spark-shell --jars /opt/offline/nebula/nebula-algorithm-3.0.0.jar

spark版本不兼容,algorithm只支持spark2.4

哦哦 好的 我改下版本试试 谢谢!
另外还想多问一下,1. 如果调用louvain算法进行社区划分后,如何将结果应用回图库呢?
2. 是给每个节点加一个类似cluster_id的属性吗?(我前几天用python中的igraph和louvain模块,是这么做的)
3. 是否能将节点的社区划分可视化呢?

1和2: 是的,算法结果你需要写回图数据库的话是写到节点属性上的,所以要求tag 有对应的属性名,louvain算法要求属性名是 louvain
3. 你写回图数据库后,可以通过studio进行节点展示,根据你的louvain属性值进行着色

我将tag增加了louvain属性,并插入了不同的值:

请问接下来我该如何进行着色显示呢?

参考这里的回复

老师 您好!我将spark版本改为2.4之后,可以跑通,特别感谢!
我还想问两个问题:

  1. val louvainConfig = LouvainConfig(10, 5, 0.5),这三个参数分别指maxIter,internalIter和tol吗?我看了LouvainAlgo.scala中的源码,还是不太明白这三个参数分别代表什么含义呢?
  2. 针对跑出的结果

    louvain这一列是指所被划分的社区编号吗?为什么数值不连续呢?
    感谢老师解答!

为啥你觉得社区编号是连续的呢,:thinking:

也就是说louvain这一列是指社区编号吧?我之前用python做的时候,结果是下面这样:
image
我理解0 1 2 3 4 是不同的簇。
那louvain这一列的不同值也是代表不同簇吧?

您能帮我看看这三个参数代表什么意思嘛? :smile:

参考这个。

OK 看明白了! 感谢您!

因为算法内部是采用 当前社区内节点的最小id作为该社区的编号,不同社区内最小的节点id通常不连续的

1 个赞

明白了! 谢谢!! :kissing_heart:

老师您好! 我又有个问题:
我采用提交algorithm算法包的方式跑louvain算法,将application.conf中的data source和data sink都设置为nebula,nebula write中的type改为“update”。

然后运行,发生如下错误:


这个是怎么回事呢?

插入的语句过多了,试试少点小批量插入看看。

目前的数据量是:


我如果将application.conf配置文件中的nebula-write type 改为“inset”,就不会出现这个错误,但是那样会将其他属性值(比如name,age)变为NULL。

这个assert是spark connector在更新数据的时候做的校验,algorithm里面给出的默认batch是1000,这个该应改小一些,我提个pr 你可以用最新的algorithm包

老师 您好 改小之后就解决了吗?如何改小呢?我现在的algorithm是3.0.0的

你可以自己按照这个pr改一下值,然后本地打包。 或者从这里下载 最新时间的jar包Index of /repositories/snapshots/com/vesoft/nebula-algorithm/3.0-SNAPSHOT