(小案例,有五个人他们参见相亲节目,这个五个人分别是0,1,2,3,4,号选手,计算出追随者年龄大于被追随者年龄的人数和平均年龄)
  1. scala> import org.apache.spark._
  2. import org.apache.spark._
  3. scala> import org.apache.spark.rdd.RDD
  4. import org.apache.spark.rdd.RDD
  5. scala> import org.apache.spark.graphx._
  6. import org.apache.spark.graphx._
  7. scala> import org.apache.spark.graphx.util._
  8. import org.apache.spark.graphx.util._
 
创建graph
  1. scala> var graphs =
  2. GraphGenerators.logNormalGraph(sc, numVertices = 5).mapVertices( (id, _) => id.toDouble )
  3. graphs: org.apache.spark.graphx.Graph[Double,Int] = org.apache.spark.graphx.impl.GraphImpl@1461f52d
GraphGenerators.logNormalGraph://生成一个图的顶点的出度分布是日志正常。
numVertices:生成5个顶点,也就是五个人
查看生成的graph
vertices
  1. VertexId, Double)] = Array((4,4.0), (0,0.0), (1,1.0), (3,3.0), (2,2.0))
  2. srcid attr srcid:选手编号 attr:年龄
  3. 0 0
  4. 1 1
  5. 2 2
  6. 3 3
  7. 4 4
edges
  1. Array(Edge(0,1,1), Edge(0,1,1), Edge(0,3,1), Edge(0,4,1), Edge(1,2,1), Edge(1,4,1), Edge(2,0,1), Edge(2,0,1), Edge(2,3,1), Edge(2,4,1), Edge(3,3,1), Edge(4,0,1), Edge(4,3,1))
  2. srcid dstid attr srcid:追随者 dstid:被追随者 attr:年龄
  3. 0 1 1
  4. 0 1 1
  5. 0 3 1
  6. 0 4 1
  7. 1 2 1
  8. 1 4 1
  9. 2 0 1
  10. 2 0 1
  11. 2 3 1
  12. 2 4 1
  13. 1 3 1
  14. 4 0 1
  15. 4 3 1
获取srcid>dstid的数据(把追随者年龄大于被追随者年龄的人,发送给被追随者)
  1. scala> val olderFollowers: VertexRDD[(Int, Double)] = graphs.aggregateMessages[(Int, Double)](
  2. | triplet => { // Map Function
  3. | if (triplet.srcAttr > triplet.dstAttr) {
  4. | // Send message to destination vertex containing counter and age
  5. | triplet.sendToDst(1, triplet.srcAttr)
  6. | }
  7. | },
  8. | // Add counter and age
  9. | (a, b) => (a._1 + b._1, a._2 + b._2) // Reduce Function
  10. | )
获取graphs的triplets,过滤出来srcAttr>srcDst的数据,并将结果发送给DstId
 triplet.sendToDst(1, triplet.srcAttr):中的1是一个计数器,
查看数据
  1. res3: Array[(org.apache.spark.graphx.VertexId, (Int, Double))] = Array((0,(3,8.0)), (3,(1,4.0)))
(0,(3,8.0):
0是srcId
3是srcId的入度
8.0是attr的和
计算出平均年龄
  1. scala> val avgAgeOfOlderFollowers: VertexRDD[Double] =
  2. | olderFollowers.mapValues( (id, value) =>
  3. | value match { case (count, totalAge) => totalAge / count } )
  4. avgAgeOfOlderFollowers: org.apache.spark.graphx.VertexRDD[Double] = VertexRDDImpl[48] at RDD at VertexRDD.scala:57
olderFollowers.mapValues:只对value进行操作
count是计数后的值
tatalAge:是attr的和

graph小案例的更多相关文章

  1. 机械表小案例之transform的应用

    这个小案例主要是对transform的应用. 时钟的3个表针分别是3个png图片,通过setInterval来让图片转动.时,分,秒的转动角度分别是30,6,6度. 首先,通过new Date函数获取 ...

  2. shell讲解-小案例

    shell讲解-小案例 一.文件拷贝输出检查 下面测试文件拷贝是否正常,如果cp命令并没有拷贝文件myfile到myfile.bak,则打印错误信息.注意错误信息中basename $0打印脚本名.如 ...

  3. [jQuery学习系列六]6-jQuery实际操作小案例

    前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> &l ...

  4. 02SpringMvc_springmvc快速入门小案例(XML版本)

    这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:

  5. React.js入门小案例

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  6. SqlDependency缓存数据库表小案例

    SqlDependency的简介: SqlDependency是outputcache网页缓存的一个参数,它的作用是指定缓存失效的数据库依赖项,可以具体到数据库和表. SqlDependency能解决 ...

  7. JavaScript apply函数小案例

    //回调函数1 function callback(a,b,c) { alert(a+b+c); } //回调函数2 function callback2(a,b) { alert(a+b); } / ...

  8. Session小案例------完成用户登录

    Session小案例------完成用户登录     在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...

  9. ch1-vuejs基础入门(hw v-bind v-if v-for v-on v-model 应用组件简介 小案例)

    1 hello world 引入vue.min.js 代码: ----2.0+版本 <div id="test"> {{str}} </div> <s ...

随机推荐

  1. Path Sum II (Find Path in Tree) -- LeetCode

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  2. 细说JavaScript对象(3):hasOwnProperty

    判断一个属性是定义在对象本身而不是继承自原型链,我们需要使用从 Object.prototype 继承而来的 hasOwnProperty 方法. hasOwnProperty 方法是 JavaScr ...

  3. 深入分析GCC 与 编绎系统透视

  4. Android简单的利用SoundPool进行播放铃声的实例代码

    MainActivity.java package com.example.pengdonglin.soundpool_demo; import android.annotation.Suppress ...

  5. 墨卡托投影、高斯-克吕格投影、UTM投影及我国分带方法

    转自原文 墨卡托投影.高斯-克吕格投影.UTM投影及我国分带方法 一.墨卡托投影.高斯-克吕格投影.UTM投影 1. 墨卡托(Mercator)投影 墨卡托(Mercator)投影,是一种" ...

  6. 【maven】maven的web项目打包报错:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK

    打包过程中报错如下: No compiler is provided in this environment. Perhaps you are running on a JRE rather than ...

  7. 对于session序列化跟session的钝化与活化的粗浅理解

    1. API对序列化的解释:类通过实现 java.io.Serializable 接口以启用其序列化功能.未实现此接口的类将无法使其任何状态序列化或反序列化.可序列化类的所有子类型本身都是可序列化的. ...

  8. Spark 2.0 DataFrame map操作中Unable to find encoder for type stored in a Dataset.问题的分析与解决

    转载:http://blog.csdn.net/sparkexpert/article/details/52871000 随着新版本的spark已经逐渐稳定,最近拟将原有框架升级到spark 2.0. ...

  9. asp.net自制分页页码条控件

    用过微软的服务器控件分页的人都知道~那卡的一A啊~ 遂想自制分页页码条控件以备不时之需. 走你~ public static class PageShow { /// <summary> ...

  10. 【转载】深入理解JVM性能调优

    性能问题无非就这么几种:CPU.内存.磁盘IO.网络.那我们来逐一介绍以下相关的现象和一些可能出现的问题. 一.CPU过高. 查看CPU最简单的我们使用任务管理器查看,如下图所示,windows下使用 ...