图算法louvain的使用问题

  • nebula 版本:2.6.1
  • 部署方式:单机
  • 安装方式:RPM
  • 是否为线上版本: N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
      您好,关于图算法louvain的使用,我有几点疑问请教您:
      1、现在我的实体有很多种,设备,下单手机,ip,支付账号等,同时梳理了实体之间的关系,梳理出了多个csv;
      2、那我怎么去调用louvain算法?支持多个csv读入吗?我看案例里面就是读取一个简单的csv;
      3、另外我的节点id都是字母加下划线加数字组合而成的,这样的方式不支持吗?无法直接转换成数字,而且数据比较大。
      4、louvain算法的边的权重可以支持多个数据吗?比于两个节点间边的关系有三个数值,而不是单一的某个数字;
1 个赞

问题2:参考 Nebula Algorithm - Nebula Graph Database Manual
问题3:支持字符串ID
问题4:两个顶点之间可以有多条边

1 个赞

太赞了,algorithm 已经支持了非 int vid 了对么?

1&2. nebula-algorithm 推荐使用api的形式进行算法调用, 你可以用nebula-spark-connector分别将csv数据读取出来整合到一个dataframe中。
3. 算法本身不支持非数值型id哦,你可以参考下这个帖子的方式 利用spark的dense_rank编码 Algorithm string id 转 long 的问题 - #2,来自 nicole
3. 算法中权重不支持多个字段的,你可以对数据预处理根据一定规则将三个属性合并为一个权重值。

nebula-spark-connector分别将csv数据读取出来整合到一个dataframe中??我现在有很多vid,也有很多边,点和边的csv文件加起来大概有20个,怎么合并呢??

2个顶点之间的多条边都作为两个顶点之间边的权重吗?

前提先把每个点的csv数据处理为同构数据(即列数保持一致)
val csv1 = spark.read.csv(“path1”)
val csv2 = spark.read.csv(“path2”)
val csv3 = spark.read.csv(“path3”)
csv1.union(csv2).union(csv3) 语法详情参考 Spark SQL — PySpark 3.2.0 documentation

您好,我想请问您,如果我要把社区id里面包含节点数大于20的节点id和社区id找出来,应该怎么过滤呢?现在出来的结果相当于是一个节点对应一个社区id全部显示出来了。

我今天尝试了节点id是字母加下划线和数字的会报错,改成整数的就不报错了

你可以用snapshot版本的包,这个结果打印是有问题的, 参考下这个帖子哈

新的包打印结果就是
点id,点所属社区id。

你想把社区id里面包含节点数大于20的社区id找出来可以针对结果这样处理:

val statistic = louvain
      .select(AlgoConstants.Louvain_RESULT_COL)
      .map(row => (row.get(0).toString, 1))
      .rdd
      .reduceByKey(_ + _)
      .filter(kv=> kv._2>20)

好的,谢谢您,我还有一个问题,LouvainConfig(20, 10, 0.8),后面这个0.8是边的权重,这个权重具体怎么设置呢?有参考的方法吗?我现在边的权重都是几十上百的数值,不知道如何设置这个阈值大小?

0.8 不是权重,是louvain算法中的阈值。 就是在计算模块度偏差的时候,用一个阈值判断某个差值是否有效。

您好,这个2.5-SNAPSHOT版本在哪里下载啊?没看到

https://oss.sonatype.org/content/repositories/snapshots/com/vesoft/nebula-algorithm/2.5-SNAPSHOT/

我现在想调用connect component,感觉应该是类似场景,想请教一下。1&2的整合应该如何操作呢?表头按照设备,下单手机,ip,支付账号这样吗?缺失就填空值吗?

浙ICP备20010487号