EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Louvain

run API

  • API
    def run(edges: RDD[(Long, Long, Double)],iterNum: Int,isDirected: Boolean,partitionNum: Int): (Double, RDD[(Long, Long)])
  • 功能描述

    基于输入的图实现社区检测功能, 终输出社区划分结果以及对应的模块度值。

  • API描述
    1. 包名:package org.apache.spark.graphx.lib
    2. 类名:Louvain
    3. 方法名:run
    4. 输入:
      1. edges: RDD[(long,long,Double)],为图的边列表信息(权值大于0)。
      2. iterNum: Int,为迭代次数参数,大于0的整数。
      3. isDirected: Boolean,图的属性信息,是否为有向图。
      4. partitionNum: Int,并行化参数,分区数量,大于0的整数。
    5. 核心参数:
      1. iterNum:算法迭代次数,要求大于0。数值越大,算法越趋近于收敛。
      2. partitionNum:算法分区个数,要求大于0。
    6. 参数详情:

      参数名称

      参数含义

      取值类型

      edges

      从文件读入的图边列表信息(权值大于0)

      RDD[(Long,Long,Dou ble)]

      iterNum

      算法接受的迭代次数

      Int大于0的整型,经验值为20

      isDirected

      图的属性信息,是否为有向图

      Boolean

      partitionNum

      数据分区个数

      Int大于0的整型

    7. 输出:

      Double,为最终社区划分的模块度数值

      RDD[(long,long)],为算法给出的社区划分信息,包含节点ID与对应社区的ID。社区ID集合是节点ID集合的子集。

  • 使用样例

    Louvain样例:

    val sparkconf = new SparkConf().setAppName("louvain").setMaster(host)
    val sc = new SparkContext(sparkconf)
    val edgesRDD = sc.makeRDD(Array((1L, 2L, 1.0), (1L, 3L, 1.0), (1L, 4L, 1.0), (2L, 3L, 1.0),
                                    (3L, 4L, 1.0), (3L, 5L, 1.0), (4L, 5L, 1.0), (4L, 6L, 1.0),
                                    (5L, 1L, 1.0), (5L, 2L, 1.0), (5L, 6L, 1.0), (6L, 7L, 1.0)))
    val iterNum = 20
    val isDirected = false
    val partitionNum = 10
    val (modQ, comm) = Louvain.run(edgesRDD, iterNum, isDirected, partitionNum)
    println(“Modularity:\t%.5f”.format(modQ))
    comm.collect().sortBy(_._1).foreach(println(_))
  • 样例结果

    第一列为节点ID,第二列为社区ID。

    社区划分模块度值:

    Modularity:     0.11111
    社区划分信息:
    (1,2)
    (2,2)
    (3,2)
    (4,4)
    (5,2)
    (6,4)
    (7,4)