import org.apache.spark.graphx.{Edge, EdgeContext, Graph, VertexRDD}
import org.apache.spark.{SparkConf, SparkContext}
方法一:join
object aggregate_demo2 {
//数据发送 [Int, String, Int]分别代表:[顶点的数据集(初始化完成之后就是距离的数据集),边的数据集(两顶点的关系的名称), 发送的消息的数据类型]
def sendMsg(ec:EdgeContext[Int,String,Int])={
//向每条边的目标顶点发送数据,发送的是 源顶点的src的属性数据+1
ec.sendToDst(ec.srcAttr + 1)
}
//统计每个顶点收到的数据的值, 返回最大的数据值,作为顶点的属性数据
def mergeMsg(a:Int, b:Int):Int={
math.max(a,b)
}
def sumEdgeCount(g:Graph[Int,String], i:Int = 1):Graph[Int,String]={
//执行aggregateMessages,返回顶点数据集
val verts= g.aggregateMessages[Int](sendMsg, mergeMsg)
verts.collect.foreach(println(_))
//创建一个新的图g2,由新生成的顶点数据集和生成前的边的数据集构成(边的数据集是一直不变的)
val g2 = Graph(verts, g.edges)
//然后,将g2和g的顶点数据集join起来,计算