Spark学习笔记:aggregateMessages

应用情景:分析一个图时,需要分析与顶点相连接的每个顶点的信息,例如,需要统计汇总指向A点的每个顶点的信息:每个点的年龄

为了提高性能,主要的聚合操作从graph.mapReduceTriplets改为了新的graph.AggregateMessages。


1.生成一个100个点的graph,边的数目随机。点属性Double,表示该点的年龄,边属性Int

scala> import org.apache.spark.graphx.util.GraphGenerators
scala> val graph: Graph[Double, Int] = GraphGenerators.logNormalGraph(sc, numVertices = 100).mapVertices( (id, _) => id.toDouble )

2.生成点集olderFollowers: VertexRDD[(Int, Double)],Int为年龄大于该点的点的数目,Double为这些点的年龄的累加和

scala> val olderFollowers: VertexRDD[(Int, Double)] = graph.aggregateMessages[(Int, Double)](
  triplet => { 
    if (triplet.srcAttr > triplet.dstAttr) {
      triplet.sendToDst(1, triplet.srcAttr)
    }
  },
  (a, b) => (a._1 + b._1, a._2 + b._2)
)

上述 ( 1 , triple.srcAttr ) 为发送给dst的消息
triplet => … 可视为map过程
(a,b) => … 可视为reduce过程

3.求出平均年龄

scala> val avgAgeOfOlderFollowers: VertexRDD[Double] =
olderFollowers.mapValues( (id, value) => value match { case (count, totalAge) => totalAge / count } )

scala> avgAgeOfOlderFollowers.collect.foreach(println(_))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值