美文网首页数客联盟
使用GraphX计算粉丝平均年龄

使用GraphX计算粉丝平均年龄

作者: Woople | 来源:发表于2018-06-15 08:57 被阅读48次

本文通过GraphX的aggregateMessages方法计算社交网络中某个人的所有粉丝的平均年龄

算法过程

  1. 图1中假设2,3,4这三个人同时关注了1
  2. 图2中通过aggregateMessages的自定义Map函数,将每个关注者的年龄发送给被关注者
  3. 图3中通过aggregateMessages的自定义Reduce函数,对发送过来的数据进行累加
  4. 图4最终用年龄总和除以关注者的人数,得到关注者的平均年龄,这样被关注者1就增加了一个新的属性,粉丝的平均年龄

算法实现

数据准备
users.txt

1,Andy,40
2,Gigi,25
3,Maggie,20
4,Annie,18
5,Amanda,24
6,Matei,30
7,Martin,35

followers.txt

2 1
3 1
4 1
7 3
6 2
5 2

实现

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.graphx.{Graph, GraphLoader, VertexRDD}

object AggregateMessagesTest {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Aggregate Messages Test").setMaster("local[1]")
    val sc = new SparkContext(conf)
    
    val users = (sc.textFile("/tmp/users.txt")
      .map(line => line.split(",")).map( row => (row(0).toLong, (row(1), row(2).toLong))))
    val followerGraph = GraphLoader.edgeListFile(sc, "/tmp/followers.txt")

    // 添加用户属性
    val graph = followerGraph.outerJoinVertices(users) {
      (_, _, attr) => attr.get
    }

    // 计算粉丝的数量以及年龄和
    val followers: VertexRDD[(Int, Long)] = graph.aggregateMessages[(Int, Long)](
      triplet => { // Map Function
          // 发送顶点数和年龄到被关注者
          triplet.sendToDst((1, triplet.srcAttr._2))
      },
      // 累计粉丝数量和年龄
      (a, b) => (a._1 + b._1, a._2 + b._2) // Reduce Function
    )

    // 计算平均年龄
    val avgAgeOfFollowers: VertexRDD[Double] =
      followers.mapValues( (id, value) => value match { case (count, totalAge) => totalAge / count } )
    // 显示结果
    avgAgeOfFollowers.collect.foreach(println(_))
  }
}

输出结果

(1,21.0)
(3,35.0)
(2,27.0)

可以看到顶点1的粉丝平均年龄为21,和算法模拟过程的结果一致

相关文章

  • 使用GraphX计算粉丝平均年龄

    本文通过GraphX的aggregateMessages方法计算社交网络中某个人的所有粉丝的平均年龄 算法过程 图...

  • Spark GraphX

    Spark GraphX概述 GraphX是Spark的一个组件,专门用来表示图以及进行图的并行计算。GraphX...

  • Spark GraphX图计算框架原理概述

    【转载】原文地址:原文地址 概述   GraphX是Spark中用于图和图计算的组件,GraphX通过扩展Spar...

  • Spark GraphX

    Spark GraphX GraphX简介 主要特点 演化过程 应用场景 分布式图计算处理技术介绍 下面分别从图数...

  • neo4j之图计算

    如何通过neo4j做图计算 spark中graphx对neo4j的数据进行读取,然后通过graphx的相关算法进行...

  • scala val 和def 的区别,graphx mapTri

    spark + scala + sql+graphx 的版本一致性的坑 在使用spark graphx 的mapE...

  • 186、Spark 2.0之Dataset开发详解-初步体验un

    需求 计算部门平均年龄与薪资计算部门性别平均年龄与薪资 数据 department.json employee.j...

  • Spark-GraphX

    概要 GraphX是Spark的一个新模块,该模块用于图和图并行计算。在更高的层面上,GraphX通过引入一种新的...

  • spark graphx 图计算

    写在前面 态度决定高度!让优秀成为一种习惯! 世界上没有什么事儿是加一次班解决不了的,如果有,就加两次!(- - ...

  • GraphX分布式存储

    GraphX分布式存储 GraphX将图数据以RDD分布式地存储在集群的节点上,使用顶点RDD(VertexRDD...

网友评论

    本文标题:使用GraphX计算粉丝平均年龄

    本文链接:https://www.haomeiwen.com/subject/bmhpeftx.html