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

6 篇文章 0 订阅
5 篇文章 0 订阅

aggregateMessages

类graph提供了聚合方法aggregateMessages,关于使用方法官方给出了具体的案例参考:

// Import random graph generation library
import org.apache.spark.graphx.util.GraphGenerators
// Create a graph with "age" as the vertex property.  Here we use a random graph for simplicity.
val graph: Graph[Double, Int] =
  GraphGenerators.logNormalGraph(sc, numVertices = 100).mapVertices( (id, _) => id.toDouble )
// Compute the number of older followers and their total age
val olderFollowers: VertexRDD[(Int, Double)] = graph.aggregateMessages[(Int, Double)](
  triplet => { // Map Function
    if (triplet.srcAttr > triplet.dstAttr) {
      // Send message to destination vertex containing counter and age
      triplet.sendToDst(1, triplet.srcAttr)
    }
  },
  // Add counter and age
  (a, b) => (a._1 + b._1, a._2 + b._2) // Reduce Function
)

不过为了更清晰的理解该方法的使用方式,故采用更简单的代码实践以供理解:
1,随机产生图的数据集;

val graph=
GraphGenerators.logNormalGraph(sc, numVertices = 100).mapVertices( (id, _) => id.toDouble )

为了定位函数效果,选取srcId=80的点,数据如下图所示:
这里写图片描述

2,利用aggregateMessages方法计算以srcId=80为源点的邻居点的个数和总和,主要掌握sendToDst和sendToSrc方法的特点,前者是以dst为聚集点,后者则是以src为聚集点,方法定义如下;

val olderFollower=graph.aggregateMessages[(Int, Double)](
      e => e.sendToSrc(1,e.dstAttr),
      (a, b) => (a._1 + b._1, a._2 + b._2) )

之后查看srcId=80的聚合效果如下图所示:
这里写图片描述

3.若是在定义aggregateMessages使用sendToDst方法时,如下:

val olderFollowers=graph.aggregateMessages[(Int, Double)](
      e => e.sendToDst(1,e.srcAttr),
      (a, b) => (a._1 + b._1, a._2 + b._2) )

原始数据如下所示:
这里写图片描述
则效果如下图所示:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值