




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spark应用开发技术本章主要讲述SparkGraphX:图计算框架。通过学习本节将能够学习SparkGraphX:图计算框架。通过本节学习可以:理解图与图计算的基本概念掌握GraphX图的创建方法掌握GraphX的基本操作掌握以GraphX进行关联聚合操作认识SparkGraphX图的基本概念、图计算的应用、GraphX的基础概念、GraphX的发展了解GraphX常用API图的创建与存储、数据查询与数据转换、结构转换与关联聚合构建信任网络并找出目标用户构建网站信任网络、找出需要支付稿酬的用户、找出进入热门榜的用户1.图创建与存储Edge:边对象,存有srcId,dstId,attr三个字段,以及一些操作Edge的方法,例:Edge(srcId,dstId,attr)RDD[Edge]:存放着Edge对象的RDDEdgeRDD:完整提供边的各种操作类RDD[(VertexId,VD)]:存放顶点的RDD,顶点有VertexId和VD两个字段,第一个是顶点Id,第二个是顶点属性。定义一个顶点例如:(VertexId,VD)VertexRDD:提供顶点的各种操作方法的对象了解GraphX常用API1.图创建与存储
图的创建是进行图计算的重要步骤,在SparkGraphX中创建图的方式很多,根据不同的数据集有不同的方法。GraphX有一个类Graph,Graph对象是用户的操作入口,主要包含边属性edge(边)、顶点属性vertex(顶点)、图的创建方法、查询方法和其他转换方法等。其中Graph类中图的创建方法主要有3种,适用于不同类型的输入数据。了解GraphX常用API1.图创建与存储了解GraphX常用API用户信息vertices.txt,有3个字段,分别为用户Id,姓名和职业另一份数据“edges.txt”是用户之间的关系数据,有3个字段,第1、2个是用户Id,第3个是第1个用户对于第2个用户的关系,如“37Collaborator”表示3是7的合作伙伴。根据顶点数据和边数据,可以构建如图所示的用户关系网络图,顶点包含用户Id和用户属性,边有起点和目标点,并且有边属性和指向。1.图的创建与存储在使用SparkGraphX进行操作时,需要先将指定的包导入了解GraphX常用API1.图的创建与存储方式一根据有属性的顶点和边构建图(Graph(vertices,edges,defaultVertexAttr))vertices:RDD[(VertexId,VD)]:“顶点”类型的RDD,其中VertexId为顶点ID(必须为Long类型),VD为顶点属性信息。edges:RDD[Edge[ED]]:“边”类型的RDD,Edge类包含srcId(起点,Long类型)、dstId(目标点,Long类型),attr(边属性)三个部分。defaultVertexAttr:一个固定的顶点信息,用于当数据中出现顶点缺失时使用。了解GraphX常用API1.图的创建与存储方式一“顶点”和“边”的RDD来自不同的数据源,与Spark中其他RDD的建立并没有区别,但是顶点Id要求是Long类型了解GraphX常用API1.图的创建与存储方式一查询创建完成的图graph_urelate可以用graph_urelate.vertices查看顶点信息,用graph_urelate.edges查看边信息了解GraphX常用API1.图的创建与存储方式二根据边创建图(Graph.fromEdges(RDD[Edge[ED]],defaultValue))这种方法相对而言最为简单,只是由Edge类型RDD建立图,边的属性没有则设为一个固定值,由“边”RDD中出现所有顶点(无论是起始点src还是目标点dst)自动产生顶点vertextId,顶点的属性将被设置为一个默认值。fromEdges方法有两个参数值如下RDD[Edge[ED]]:“边”类型的RDD,Edge包含(srcId,dstId,prop)defaultValue:VD:默认顶点属性值。了解GraphX常用API1.图的创建与存储方式二Graph.fromEdges创建图只需要边的数据如下代码所示,仅根据“edges.txt”中的边数据创建图,顶点由边数据中出现的顶点决定。了解GraphX常用API1.图的创建与存储方式二对图的顶点和边进行查询如图所示,文件中的边和边属性都加载到图中,顶点则根据边的数据提取了起点和目标点作为顶点,顶点属性默认值1了解GraphX常用API1.图的创建与存储方式三根据边的两个顶点的元组创建图(Graph.fromEdgeTuples())Graph.fromEdgeTuples()通过边的两个顶点ID组成的二元组创建图,将一条边的起点与目标点放在一个二元组中,通过边的二元组RDD创建图。rawEdges:RDD[(VertexId,VertexId)]:其中的数据类型是一个起点与目标点的元组defaultValue:VD:默认属性值。uniqueEdges:Option[PartitionStrategy]=None:是否对边进行分区选项,可选可不选,默认不分区了解GraphX常用API1.图的创建与存储方式三fromEdgeTuples仅需要边的起点和目标点,将数据“edges.txt”作为输入数据,通过fromEdgeTuples方法构造图了解GraphX常用API1.图的创建与存储方式三对图的边和顶点进行查询了解GraphX常用API2.图的缓存图的缓存和释放缓存主要方法如表所示了解GraphX常用API2.图的缓存在Spark中,RDD默认没有持久化在内存中。当多次使用某个变量时,为了避免重复计算,变量必须被明确缓存,GraphX中的图也是相同的方式。当一个图需要多次计算使用时,需要对图进行缓存,缓存有cache和persist两种方法对于persist,如果想指定缓存类型为StorageLevel.MEMORY_ONLY,需要导入org.apache.spark.storage.StorageLevel包了解GraphX常用API2.图的缓存——释放缓存对于已经完成计算无需再使用的缓存内容可以进行释放,在迭代过程中无需再使用的缓存也可以释放。释放缓存方法有如下3种。Graph.unpersist(blocking=true):释放整个图缓存Graph.unpersistVertices(blocking=true):释放内存中缓存的vertices。Graph.edges.unpersist(blocking=true):释放边缓存,使用对边进行修改,但会重复使用点进行运算的操作了解GraphX常用API3.图数据查询图创建之后,对所创建的图进行查询。查询内容包括顶点与边的个数,顶点与边的视图,出度数(以当前顶点为起点的边的数量),入度数(以当前顶点为目标点的边的数量)。基本的方法如所示了解GraphX常用API3.图数据查询numEdges:查询图中边的数量numEdge方法可以查询边的数量,不需要输入任何参数,直接通过Graph.numEdges查询,返回类型为Long类型numVertices:查询图中顶点个数numVertices方法可以查询顶点个数,不需要输入任何参数,直接通过Graph.numVertices查询,返回类型为Long类型。了解GraphX常用API3.图数据查询顶点视图:顶点视图可以查看顶点的信息,通过graph.vertices可以返回一个VertexRDD[(VD],VD为顶点属性,它继承于RDD[(VertexID,VD)],所以可以看到顶点的ID和属性,也可以用Scala的case表达式解构这个元组直接查看顶点信息:graph.vertices.collect通过模式匹配解构元组:根据返回的顶点字段数,通过模式匹配返回的RDD类型元组了解GraphX常用API3.图数据查询顶点视图增加过滤条件的顶点视图:通过filter方法增加过滤条件查询感兴趣的顶点信息通过下标查询:可以直接根据Spark元组的特性通过下标的方式访问返回的顶点信息了解GraphX常用API3.图数据查询边视图:边视图只会返回边的信息。graph.edges返回一个包含Edge[ED]对象的EdgeRDD,ED表示边属性的类型。Edge有三个字段:起点Id、目标点Id、边属性。并且可以通过case类的类型构造器匹配返回的EdgeRDD直接查看所有边信息:graph.edges.collect了解GraphX常用API3.图数据查询边视图通过模式匹配解构并且添加过滤条件:用模式匹配Edge类型的返回结果,再利用filter进行过滤通过下标查询:通过下标查询时,由于Edge类中有三个属性srcId,dstId和attr,因此可以直接指定属性访问了解GraphX常用API3.图数据查询顶点与边的三元组整体视图:三元视图逻辑上将顶点和边的属性保存为一个RDD[EdgeTriplet[VD,ED]],它包含EdgeTriplet类的实例。EdgeTriplet类继承于Edge类,所以可以直接访问Edge类的三个属性,并且加入了srcAttr和dstAttr成员,这两个成员分别包含起点和目标点的属性。graph.triplets可以查看到边和顶点的所有信息,是一个完整的视图直接查询:graph.triplets.collect,查询用户关系网络图,返回结果包含顶点和边的所有信息,包括边的起点和目标点,起点属性,目标点属性,边属性。了解GraphX常用API3.图数据查询顶点与边的三元组整体视图通过下标查询:通过新成员变量srcAttr,dstAttr可以访问起点属性和目标点属性,可以用边的字段访问边的属性了解GraphX常用API3.图数据查询度分布计算:度分布检测的目的,主要是了解图中“超级节点”的个数和规模,以及所有节点度的分布曲线。超级节点的存在对各种传播算法都会有重大的影响(不论是正面助力还是反面阻力),因此要预先对这些数据量有个预估。借助GraphX最基本的图信息接口degrees:VertexRDD[Int](包括inDegrees和outDegrees),这个指标可以轻松计算出来,并进行各种各样的统计degrees:返回每个顶点的度inDegrees:计算每个顶点的入度数,不需要参数outDegrees:计算顶点的出度,不需要参数了解GraphX常用API3.图数据查询了解GraphX常用API自定义函数&内置函数:用户如果想要对图的度进行一些特别的计算,比如最大最小值,平均值一类的计算,可以通过自定义函数的方式,也可以通过RDD所内置的函数完成。利用自定义函数统计度的最大值,如右上图所示使用RDD自带的统计函数进行度分布分析,使用RDD内置min,max,sortByKey,top等等对度进行统计,graph.degrees返回的是VertexRDD[Int],即(VertexID,Int),需要调换成RDD[(Int,VetexId)],因为这些函数都是对第一个值也就是key操作的4.图数据转换通过以下的数据操作转换命令转换数据的一个重要特征是它允许所得图形重用原有图形的结构索引(indices),SparkGraphX常见的数据转换方法主要如表所示了解GraphX常用API4.图数据转换mapVertices:通过graph.mapVertices直接对顶点进行map,返回按用户提供函数改变了图中顶点属性的值或类型之后的图。该方法主要需要一个函数,调用Spark中的map操作,更新顶点的属性值,由VD-->newVD。了解GraphX常用API4.图数据转换mapEdges:通过graph.mapEdges直接对边的属性进行操作,调用Spark中的map操作更新边的属性值,由ED-->newED,返回按用户提供函数改变图中边属性的值或类型之后的图mapTriplets:该方法的操作也是针对边的属性值,通过调用Spark中的map操作更新边的属性值,由ED-->newED。例如将边的属性用起点的属性的第一个值姓名替换了解GraphX常用API5.结构转换结构转换是对整个图的结构进行操作,生成新的图。SparkGraphX中图的结构转化操作方法也是存放在类Graph中,主要方法如表所示了解GraphX常用API5.结构转换通过user.txt和relate.txt创建用户社交网络图reverse:返回一个新的图,这个图的边的方向与原图相比都是反转的。没有修改顶点或者边的属性或者改变边的数量,不需要输入其他参数了解GraphX常用API5.结构转换对社交网络图graph进行结构转换subgraph:创建子图的方法。子图是指节点集和边集分别是某一图的节点集的子集和边集的子集的图在graph.subgraph方法中需要输入边的过滤条件或顶点的过滤条件,顶点操作可以通过字段vpred匹配顶点属性个数。对于边属性,可以通过epred字段匹配,其中的属性可以通过默认属性名获取了解GraphX常用API5.结构转换对社交网络图graph进行结构转换mask:合并两个图并且只保留两个图中都有的顶点和边,在使用时需要输入另一个图作为参数。groupEdges:用来合并相同Id的边了解GraphX常用API6.关联聚合关联转换与聚合操作是图计算的一个重点,通过关联操作可以将顶点属性值连接到图中。而聚合操作可以发送信息给指定顶点并将数据聚集起来,达到指定的目的。关联聚合的方法如表所示了解GraphX常用API6.关联聚合了解GraphX常用APIcollectNeighbors:该方法的作用是收集每个顶点的邻居顶点的顶点Id和顶点属性,邻居顶点为与该点直接相连的顶点。该方法需要输入一个参数,返回的结果是顶点Id和顶点属性的元组。参数只有以下几种类型。EdgeDirection.Out:表示只收集以该顶点为起点,邻居顶点为目标点的邻居顶点的顶点Id和顶点信息EdgeDirection.In:表示只收集以邻居顶点作为起点,该点作为目标点的邻居顶点的顶点Id和顶点信息EdgeDirection.Either:收集所有邻居顶点的顶点Id和顶点信息6.关联聚合collectNeighborIds:该方法与collectNeighbors方法一致,只是该方法只返回顶点Id,不返回顶点信息了解GraphX常用API6.关联聚合aggregateMessages:GraphX中的核心聚合操作是aggregateMessages,它主要功能是向邻边发消息,合并邻边收到的消息,aggregateMessages方法定义如下defaggregateMessages[Msg:ClassTag](sendMsg:EdgeContext[VD,ED,Msg]=>Unit,mergeMsg:(Msg,Msg)=>Msg,tripletFields:TripletFi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 研发中心场委托招聘合作协议
- 茶具研发与生产合作协议
- 财务离职保密及竞业限制合同范本
- 餐饮连锁品牌特许经营区域保护协议书
- 特色餐厅厨房设计与施工承包合同
- 产业园区场合作经营与产业布局协议
- 跨境电商跨境支付反欺诈风险管理合同
- 旅游景区场地转租管理服务协议
- 回流洗肠护理操作规范
- 2025年企业安全协议
- 卫健系统2025年上半年安全生产工作总结
- 麻精药品规范化管理与使用
- 庐江县2024-2025学年四下数学期末达标测试试题含解析
- 湘教版地理中考总复习教案
- 高中英语新课标3000词汇表(新高考)
- 2025年个人房贷还款合同格式
- 2025年度老旧小区改造工程施工合同交底范本
- 2025年福建厦门市翔安市政集团水务管理有限公司招聘笔试参考题库附带答案详解
- 江苏2024年江苏海事职业技术学院招聘11人(第三批)笔试历年参考题库附带答案详解
- 2025年绵阳燃气集团有限公司招聘笔试参考题库含答案解析
- 各种奶茶配方资料
评论
0/150
提交评论