graph shortestpaths和pregel、mapReduceTriplets等中发送消息方向问题

mapReduceTriplets
代码为例,sendMsg中id决定了接收消息的点,而activeSetOpt: Option[(VertexRDD[_], EdgeDirection)] = None
中的EdgeDirection指定了哪些和顶点相邻的边处理sendMsg。如果该方向是in,则作用于目标顶点在VertexRDD中的边。如果方向是out,则作用在那些源顶点在vertexRDD中的边。如果方向是 either,则 map 函数将仅在任一点在
vertexRDD
中的边。如果方向是 both,则map函数将仅作用在两个顶点都在活跃集vertexRDD中。活
跃集合必须来自图的顶点中。
 
即activeSetOpt决定了作用边,sendMsg中的id决定了接收消息的点是目的顶点还是源顶点



private[graphx] def mapReduceTriplets[VD: ClassTag, ED: ClassTag, A: ClassTag](
    g: Graph[VD, ED],
    mapFunc: EdgeTriplet[VD, ED] => Iterator[(VertexId, A)],
    reduceFunc: (A, A) => A,
    activeSetOpt: Option[(VertexRDD[_], EdgeDirection)] = None): VertexRDD[A] = {
  def sendMsg(ctx: EdgeContext[VD, ED, A]) {
    mapFunc(ctx.toEdgeTriplet).foreach { kv =>
      val id = kv._1
      val msg = kv._2
      if (id == ctx.srcId) {
        ctx.sendToSrc(msg)
      } else {
        assert(id == ctx.dstId)
        ctx.sendToDst(msg)
      }
    }
  }
  g.aggregateMessagesWithActiveSet(
    sendMsg, reduceFunc, TripletFields.All, activeSetOpt)
}

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值