鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Modularity

Modularity API

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

    根据指定输入参数计算图在指定社区划分下的模块度值。

  • 输入输出
    1. 包名:package org.apache.spark.graphx.lib
    2. 类名:Modularity
    3. 方法名:run
    4. 输入:
      1. nodes: RDD[(Long, Long)],为图中节点id与对应的社区id
      2. edges: RDD[(Long, Long, Double)],为图的边列表信息(权值大于0)。
      3. isDirected: Boolean,图的属性信息,是否为有向图
      4. partitionNum: Int,并行化参数,分区数量
    5. 核心参数:
      1. partitionNum: 算法接受的分区个数,要求大于0,取值范围可以按照一个分片大小4M-6M计算(经验值,根据具体数据量设置。不建议取太大的值,会造成系统资源的占用)。该值的大小会影响算法性能,可调整其数值大小优化算法性能。
    6. 输出:Double,为指定图在对应社区划分下的模块度数值。

      参数名称

      参数含义

      取值类型

      nodes

      从文件读入的节点与对应的社区信息

      RDD[(Long, Long)]

      edges

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

      RDD[(Long, Long, Double)]

      isDirected

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

      Boolean

      partitionNum

      数据分区个数

      Int大于0的整型

  • 使用样例

    Modularity样例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    val sparkconf = new SparkConf().setAppName("modularityCompute").setMaster(host)
    val sc = new SparkContext(sparkconf)
    
    val nodesRDD = sc.makeRDD(Array((1L, 1L), (2L, 1L), (3L, 2L), (4L, 2L), (5L, 2L), (6L, 3L), (7L, 3L)))
    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 isDirected = false
    val partitionNum = 10
    val modularityQ = Modularity.run(nodesRDD, edgesRDD, isDirected, partitionNum)
    println(Modularity:\t%.5f.format(modularityQ))
    
  • 结果样例

    模块度计算结果:

    1
    Modularity:     0.01042