spark graphx 图操作:使用aggregateMessages计算每个节点与根节点的距离

本文介绍了Spark GraphX中计算图中每个节点与根节点距离的三种方法,包括join方式、参数方式和延时标记。作者探讨了不同方法的效率和应用场景。
摘要由CSDN通过智能技术生成

计算过程:简单,只不顾方式三的效率不知道提升多少

可能会再贴出方式四

author:castomere——ztw

三种方式:

方式一:join方式

package aggregate

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.graphx.{Edge, EdgeContext, Graph, VertexId, VertexRDD}

/**
 * date: 4.13
 * 图的聚合操作
 * 计算节点 与 root节点的边距
 * 通过 g2.vertices.join(g.vertices) 新图+老图的节点信息
 * sum(新图边距 - 老图边距) == 0 判作结束标志
 */
object Demo2 {

  def sendMsg(ec:EdgeContext[Int,String,Int]):Unit = {
    ec.sendToDst( ec.srcAttr +1)
  }

  def mergeMsg(a: Int , b:Int) :Int = {
    math.max(a,b)
  }

  def sumEdgeCount(g:Graph[Int,String]):Graph[Int,String] = {
    val verts: VertexRDD[Int] = g.aggregateMessages[Int](sendMsg, mergeMsg)

    val g2 = Graph(verts ,g.edges)
    println("dfs")
    verts.collect.foreach(println(_))
    println()
    g2.vertices.join(g.vertices).collect.foreach(println(_))
    //    val value: RDD[(VertexId, (Int, Int))] = g2.vertices.join(g.vertices)
    val check = g2.vertices.join(g.vertices)
      .map(x => x._2._1 - x._2._2)
      .reduce(_+_)

    if(check > 0)
      sumEdgeCount(g2)
    else
      g
  }



  def main(args: Array[String]): Unit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值