Louvain
run API
- API
def run(edges: RDD[(Long, Long, Double)],iterNum: Int,isDirected: Boolean,partitionNum: Int): (Double, RDD[(Long, Long)])
- 功能描述
- API描述
- 包名:package org.apache.spark.graphx.lib
- 类名:Louvain
- 方法名:run
- 输入:
- edges: RDD[(long,long,Double)],为图的边列表信息(权值大于0)。
- iterNum: Int,为迭代次数参数,大于0的整数。
- isDirected: Boolean,图的属性信息,是否为有向图。
- partitionNum: Int,并行化参数,分区数量,大于0的整数。
- 核心参数:
- iterNum:算法迭代次数,要求大于0。数值越大,算法越趋近于收敛。
- partitionNum:算法分区个数,要求大于0。
- 参数详情:
参数名称
参数含义
取值类型
edges
从文件读入的图边列表信息(权值大于0)
RDD[(Long,Long,Dou ble)]
iterNum
算法接受的迭代次数
Int大于0的整型,经验值为20
isDirected
图的属性信息,是否为有向图
Boolean
partitionNum
数据分区个数
Int大于0的整型
- 输出:
RDD[(long,long)],为算法给出的社区划分信息,包含节点ID与对应社区的ID。社区ID集合是节点ID集合的子集。
- 使用样例
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)
父主题: 算法API