Algorithm string id 转 long 的问题

对于非整数的String类型数据,推荐使用调用算法接口的方式,可以使用SparkSQL的dense_rank函数进行编码,将String类型转换为Long类型。

因为Louvain算法只需要传入边就行了,但是边有src,dst两个id,不知怎样才能用这个转换

这个有没有使用的例子呢,比如说edge_serve.csv, player101 → team204, 应该如何处理成long型的id,

  1. string id 转long, 转的是点id, 即便传入的是边数据,也是要对边上的源点目标点的点id进行转换。
  2. (srcId+dstId)去重后就是拓扑图中所有点id, 对所有点id 利用dense_rank编码, 得到
    player101,0
    team204,1
    这样的点编码后的映射文件。
  3. 利用点编码后的映射文件,替换掉边中的srcId和dstId, 得到0->1的边数据。
1 个赞

歪个楼,我按照编码已经跑好了,
但是这个数据看不懂,只有id和louvain两列,我看过其他帖子说要group by,我试着groupby但是 >1的数据没有,
我这是900w条边数据进去的,返回的结果集是844w个,按道理应该形成了一些社区的。但是这个不是返回的所有点的个数吗

你用的哪个版本的库, 之前的louvain结果输出时是把社区id 给输出出来了,会存在输出量小于点数量的情况的。
可以参考这个帖子https://discuss.nebula-graph.com.cn/t/topic/6082/2

用的是2.5.1的,我看到这个贴子的,所以感觉还是很奇怪

<dependency>
      <groupId>com.vesoft</groupId>
      <artifactId>nebula-algorithm</artifactId>
      <version>2.5.1</version>
    </dependency>

2.5.1的源码里面还是

val communities = G.vertices
      .map(x => {
        Row(x._1, x._2.cId)
      })

我看pr里面已经修改了,这

我知道了,要用2.5-SNAPSHOT是吧

是的 master分支中的代码已经更新了, 但有可能你会遇到版本不兼容的问题,目前的SNAPSHOT版本的客户端和2.5.0的nebula服务端是不兼容的。
如果你数据源是hdfs那没问题,如果是nebula,你可能要自己在2.5.1的algorithm分支上修改编译了。

好的,我是HDFS的数据源离线在跑,应该没有问题,我去编个snapshot

你不用编, snapshot版本已经发布了,你可以直接在你的程序中用的。

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

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