跑louvain算法时hasweight参数选择true时(即边上有权值)计算结果有问题

nebula 版本:2.6.1
部署方式:分布式
安装方式:RPM
是否为线上版本: N
算法包版本:nebula-algorithm-2.5-20211202.023336-4.jar
当hasweight参数为默认的false时,结果是正确的,左边一列为点ID,右边一列为社区ID,一个社区包含多个点,如下图所示:


当hasweight参数设置为true时,结果出现问题,两列的值完全一样,如下图所示:
true
试过多个数据集,都有同样的问题,数据集在Python和其他图数据库平台都试过带权值计算louvain,确定是可以分社区的,而不是一个点一个社区,不知是哪里出了问题,或者大佬能否提供一下带权值计算louvain测试过结果没问题的数据集,感谢!

如果方便的话,麻烦上传一下您的带权测试数据。

edge_follow.csv (1.9 KB)
edge_serve.csv (4.6 KB)
vertex_player.csv (1.1 KB)
vertex_team.csv (382 字节)
这是我根据nebula graph官方文档提供的basketballplayer数据集稍作修改用的,用Python跑带权的louvain出来的结果是能够正常分社区的
数据修改部分:1.将点的ID都改为了整数,即去掉了前面的team和player
2.follow和serve边数据的最后一列为加的权值
如果可以的话麻烦大佬带权跑一下louvain,看结果如何

配置文件中,读取csv的权重列设置的对吗?

edge_follow.csv 文件的配置,如:

    read:{
        filePath: "hdfs://127.0.0.1:9000/edge/work_for.csv"
        # If the CSV file has a header or it is a json file, use the header. If not, use [_c0, _c1, _c2, ..., _cn] instead.
        # The header of the source VID column.
        srcId:"_c0"
        # The header of the destination VID column.
        dstId:"_c1"
        # The header of the weight column.
        weight: "_c3"
        # Whether the csv file has a header.
        header: false
        # The delimiter in the csv file.
        delimiter:","
    }

详见:https://docs.nebula-graph.io/2.6.1/nebula-algorithm/

没有问题的,我是先上传到nebula图数据库中,数据源选择nebula再使用的,权重为边下的一个属性,名称设置为weight,如下图所示


提交文件的配置如下:

同样也时这个问题

当数据源是nebula且设置算法权重为true时, 数据默认选择第三列作为权重列。 实际上对于nebula而言 第三列是边的rank值, 你用的basketballplayer数据集都没有rank值,也就是权重都是0了,所以你得到的社区都是各自节点。
感谢反馈,数据处理上我们修一下

意思是hsaweight参数设置为true后,不管weightcols给的参数是哪个属性都不起作用,均以rank值为权重进行计算是嘛?

是的,这是修复的pr fix data structure for nebula datasource by Nicole00 · Pull Request #30 · vesoft-inc/nebula-algorithm · GitHub
不过pr会合在master上,master是对应nightly服务的, 你可以把代码拉下来改一下algorithm依赖的nebula-spark-connector的版本号,自己编译。

具体怎么拉下来编译呀?小白一枚对这个不太理解 :joy:

  1. 打开百度
  2. 搜索“如何拉取github代码”
    then you’ll get it

我的意思是拉下来之后怎么编译呀

看readme 或者文档,有编译说明 Nebula Algorithm - Nebula Graph Database 手册