spark组件之graphx函数方法(二)

来源:互联网 发布:淘宝分享有礼在哪找 编辑:程序博客网 时间:2024/06/07 06:48

在网络计算中,graphx提供了基本的函数和算法来计算社交网络关系中的三角关系数量,下面简单记录下一组常用的命令作为学习巩固:

1.启动spark-shell交互式环境:

import org.apache.spark.graphx._
import org.apache.spark.graphx.util._

2.利用graphx提供的类函数随机产生数据集
注:导入数据集方式(A:RDD方式,B:GraphLoader.edgeListFile(sc,hdfs-path),C:随机图生成器GraphGenerators)

val graph = GraphGenerators.logNormalGraph(sc, 100,2500)

其中,第二个参数代表顶点个数,第三个参数近似表示边个数。产生的随机图顶点及边属性均默认为整型1。

3.利用triangleCount计算社交网络三角关系数量。
注,由于triangleCount算法对图有前提要求,首先必须(srcId < dstId),其次存储方式 使用Graph.partitionBy。

val graph = GraphGenerators.logNormalGraph(sc, 100,2500).partitionBy(PartitionStrategy.RandomVertexCut)

过滤边产生子图:

val graphs = graph.subgraph(epred = e=>e.srcId < e.dstId)

然后使用算法:

val triCounts = graphs.triangleCount();

产生的triCounts类型为:org.apache.spark.graphx.Graph[Int,Int]

  1. 为了查看邻近点,这里不仅可以使用aggregateMessages函数,还可以使用collectNeighborIds和collectNeighbors更方便(某些情况效果不佳)

val neigh=graphs.collectNeighborIds(EdgeDirection.Either)

其中EdgeDirection提供三种邻近点方向,Either,In和Out,生产的为VertexRDD类型,然后采用filter查看某点的邻近点:

neigh.filter(e=>e._1==17).collect

0 0
原创粉丝点击