• 图的集合视图
  1. graph包含三个基本的类集合视图:
  1. val vertices: VertexRDD[VD]
  2. val edges: EdgeRDD[ED]
  3. val triplets: RDD[EdgeTriplet[VD, ED]],即可理解为:RDD(srcId,srcAttr,dstId,dstAttr,attr)
  1. 在对graph的某个视图作map/filter操作时,可以使用case表达式来匹配对应的元素,如:graph.edges.filter { case Edge(src, dst, prop) => src > dst }.count
  • 图信息接口
  1. val numEdges: Long
  2. val numVertices: Long
  3. val inDegrees: VertexRDD[Int]
  4. val outDegrees: VertexRDD[Int]
  5. val degrees: VertexRDD[Int]
  • 缓存方法
  1. def persist(newLevel: StorageLevel = StorageLevel.MEMORY_ONLY): Graph[VD, ED]
  2. def cache(): Graph[VD, ED]
  3. def unpersistVertices(blocking: Boolean = true): Graph[VD, ED],当在一个图上频繁修改顶点值而不重用边信息时,可以用此方法对顶点去缓存以提高GC性能
  • 节点与边的变换操作
  1. def mapVertices[VD2](map: (VertexID, VD) => VD2): Graph[VD2, ED]
  2. def mapEdges[ED2](map: Edge[ED] => ED2): Graph[VD, ED2]
  3. def mapEdges[ED2](map: (PartitionID, Iterator[Edge[ED]]) => Iterator[ED2]): Graph[VD, ED2]
  4. def mapTriplets[ED2](map: EdgeTriplet[VD, ED] => ED2): Graph[VD, ED2]
  5. def mapTriplets[ED2](map: (PartitionID, Iterator[EdgeTriplet[VD, ED]]) => Iterator[ED2]) : Graph[VD, ED2]
  • 修改图结构操作
  1. def reverse: Graph[VD, ED]
  2. def subgraph(
  3. epred: EdgeTriplet[VD,ED] => Boolean = (x => true),
  4. vpred: (VertexID, VD) => Boolean = ((v, d) => true)) : Graph[VD, ED],按条件生成子图
  5. def mask[VD2, ED2](other: Graph[VD2, ED2]): Graph[VD, ED],生成的结果图的顶点和边同时存在于原来的两个图中
  6. def groupEdges(merge: (ED, ED) => ED): Graph[VD, ED],把重复边进行reduce操作,注意此操作之前,应当在图上调用partitionBy方法
  • 图join操作
  1. def joinVertices[U](table: RDD[(VertexID, U)])(mapFunc: (VertexID, VD, U) => VD): Graph[VD, ED]
  1. def outerJoinVertices[U, VD2](other: RDD[(VertexID, U)])
  2. (mapFunc: (VertexID, VD, Option[U]) => VD2) : Graph[VD2, ED]
  1. 注: joinVertices操作实际上是根据给定的另一个图(原图的每个顶点id至多对应此图的的一个顶点id)把原图中的顶点的属性值根据指定的mapFunc函数进行修改,返回一个新图,新图的顶点类型不变,如果图中的某个顶点id在另一个图中不存在,则保留原值
  1. outerJoinVertices操作和joinVertices类似,只不过,当图中某个顶点id在另一个图中不存在时,则使用None
  1.  
  • 在邻边上聚合信息
  1. def collectNeighborIds(edgeDirection: EdgeDirection): VertexRDD[Array[VertexID]]
  2. def collectNeighbors(edgeDirection: EdgeDirection): VertexRDD[Array[(VertexID, VD)]]
  3. def aggregateMessages[Msg: ClassTag](
  4. sendMsg: EdgeContext[VD, ED, Msg] => Unit,
  5. mergeMsg: (Msg, Msg) => Msg,
  6. tripletFields: TripletFields = TripletFields.All)
  7. : VertexRDD[A]
  1. 注:聚合信息的核心方法是:aggregateMessages,其操作的本质是sendMsgmergeMsg,具体而言,是依次在图的每条边(edgeTriplets)上根据sendMsg函数的要求,把该边上A端的节点信息发送给B端,如:把src节点信息发到dst节点信息,或者把dst节点信息发送到src节点上,然后在B端调用merge函数将可能收到的多个msg合并成一个msg.
  1. tripletFields字段指定要操作哪些字段,如果仅操作部分字段的话,通过此参数进行限定可提高性能。aggregateMessages方法最终返回一个新的顶点集:VertexRDD,这个新的顶点集中每个vertex节点上包含上聚合后的信息。
  1. collectNeighborIdscollectNeighbors函数就是对aggregateMessages的简单封装以实现聚合相邻节点id和相邻节点的功能
  • VertexRDD与RDD有一个明显的区别是,VertexRDD的key不重复,而RDD的key可以重复
  • aggregateUsingIndex函数的作用类似于reduceByKey,如vertexRdd1.aggregateUsingIndex(rdd2,_+_),作用是利用vertexRdd1的索引结果对rdd2进行聚合,在rdd2中对vertexRdd1中出现的id对应的属性值做聚合操作,很像reduceByKey,得到的结果是一个VertexRDD,这个结果与vertexRdd1进行join等操作时就会很快,因为他们具有相同的索引结构
  • PageRank算法:

  graph.pageRank(tolorence,reset),用于计算类似于网页排名的各种经典问题,tolorence参数用于指定可容忍的收敛度,毕竟无穷迭代下去是耗时也意义不大的,reset参数用于设定终止点和陷阱问题的概率,防止迭代结果倾斜或终止到一个节点的事情发生,所以这个参数不能传0,详情参考:算法解析

  •   连通体算法:

    graph.connectedComponents() 返回一个新图,新图的顶点属性被替换成了该顶点所在的连通体的id,这个id是此连通体中所有节点中id最小的那个节点的id

    例如,我要计算一个图中连通图的个数: graph.connectedComponents.vertices.map(e => (e._2, 1L)).reduceByKey(_ + _).sortBy(e => e._2, ascending = false).count

Spark-GraphxAPI学习笔记的更多相关文章

  1. Spark 基本函数学习笔记一

      Spark 基本函数学习笔记一¶ spark的函数主要分两类,Transformations和Actions. Transformations为一些数据转换类函数,actions为一些行动类函数: ...

  2. Spark RDD学习笔记

    一.学习Spark RDD RDD是Spark中的核心数据模型,一个RDD代表着一个被分区(partition)的只读数据集. RDD的生成只有两种途径: 一种是来自于内存集合或外部存储系统: 另一种 ...

  3. Hadoop/Spark入门学习笔记(完结)

    Hadoop基础及演练 ---第1章 初识大数据 大数据是一个概念也是一门技术,是在以Hadoop为代表的大数据平台框架上进行各种数据分析的技术. ---第2章 Hadoop核心HDFS Hadoop ...

  4. spark scala学习笔记

    搞清楚几个概念: 闭包 柯里化 搭建了intellij idea 的scala 开发环境

  5. spark shell学习笔记

    http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html

  6. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  7. Spark学习笔记之SparkRDD

    Spark学习笔记之SparkRDD 一.   基本概念 RDD(resilient distributed datasets)弹性分布式数据集. 来自于两方面 ①   内存集合和外部存储系统 ②   ...

  8. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  9. Spark RDD设计学习笔记

    本文档是学习RDD经典论文<Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster ...

  10. Spark学习笔记2(spark所需环境配置

    Spark学习笔记2 配置spark所需环境 1.首先先把本地的maven的压缩包解压到本地文件夹中,安装好本地的maven客户端程序,版本没有什么要求 不需要最新版的maven客户端. 解压完成之后 ...

随机推荐

  1. Linux环境下搭建php开发环境的操作步骤

    本文主要记载了通过编译方式进行软件/开发环境的安装过程,其他安装方式忽略! 文章背景: 因为php和Apache等采用编译安装方式进行安装,然而编译安装方式,需要c,c++编译环境, 通过apt方式安 ...

  2. CanVas类(绘图类)

    知识点: Canvas():创建一个空的画布,可以使用setBitmap()方法来设置具体的画布 Canvas(Bitmap bitmap):以bitmap对象创建一个画布,则将内容都绘制在Bitma ...

  3. location的使用

    <script language="javascript" type="text/javascript"> function setUrl(){   ...

  4. JS定时跳转URL并输出剩余秒数

    1. [代码][JavaScript]代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <scrip ...

  5. HttpRuntime详解分析

    HttpRuntime详解分析(上) 文章内容 从上章文章都知道,asp.net是运行在HttpRuntime里的,但是从CLR如何进入HttpRuntime的,可能大家都不太清晰.本章节就是通过深入 ...

  6. Ubuntu下安装Intel Fortran编译器(ifort)

    Intel Fortan Compiler简称ifort, Windows下的ifort是收费的,但是Linux系统下提供免费的ifort,可以在下面的链接中下载需要的版本(必须先注册,随后会收到官网 ...

  7. 交叉编译和使用HTOP

    1.什么是htop htop来源于top,top是Unix/linux下功能强大的性能检测工具之一,用于实时检测并统计进程的属性和状态,基于ncurses库,可上显示文字界面.但是top已经非常陈旧, ...

  8. GLIBC_2.7升级

    GLIBC_2.7: ftp://ftp.ntua.gr/pub/FreeBSD/ports/distfiles/rpm/i386/fedora/8/glibc-2.7-2.i386.rpm ftp: ...

  9. JavaScript function函数种类介绍

    JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) {     ...

  10. Oracle学习的一些建议(转)

    核心提示:学习Oracle是一个漫长艰辛的过程.如果没有兴趣,只是被迫学习,那么是很难学好的.学习到一定程度的时候,要想进一步提高,就不得不接触很多Oracle之外的东西 学习Oracle是一个漫长艰 ...