Spark Graphx图计算之二跳邻算法实战!

Spark Graphx图计算之二跳邻算法实战!


 def sendMsgFunc(edge:EdgeTriplet[Int, Int]) = {
      if(edge.srcAttr <= 0){
        if(edge.dstAttr <= 0){
          // 如果双方都小于0,则不发送信息
          Iterator.empty
        }else{
          // srcAttr小于0,dstAttr大于零,则将dstAttr-1后发送
          Iterator((edge.srcId, edge.dstAttr - 1))
        }
      }else{
        if(edge.dstAttr <= 0){
          // srcAttr大于0,dstAttr<0,则将srcAttr-1后发送
          Iterator((edge.dstId, edge.srcAttr - 1))
        }else{
          // 双方都大于零,则将属性-1后发送
          val toSrc = Iterator((edge.srcId, edge.dstAttr - 1))
          val toDst = Iterator((edge.dstId, edge.srcAttr - 1))
          toDst ++ toSrc
        }
      }
    }

    val friends = Pregel(
      graph.mapVertices((vid, value)=> if(vid == 1) 2 else -1),

      // 发送初始值
      -1,
      // 指定阶数
      2,
      // 双方向发送
      EdgeDirection.Either
    )(
      // 将值设为大的一方
      vprog = (vid, attr, msg) => math.max(attr, msg),
      //
      sendMsgFunc,
      //
      (a, b) => math.max(a, b)
    ).subgraph(vpred = (vid, v) => v >= 0)

    println("\n\n~~~~~~~~~ Confirm Vertices of friends ")
    friends.vertices.collect.foreach(println(_))
    // (4,1)
    // (8,0)
    // (2,1)
    // (1,2)
    // (3,0)
    // (5,0)

    sc.stop


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值