(1)collectNeighbors() 方法的作用是收集每个顶点的邻居顶点的顶点 ID 和顶点属性,邻居顶点就是与该点直接相连的顶点。该方法需要输入一个参数,返回的结果是顶点 ID 和顶点属性的元组。参数有以下几种类型。
① EdgeDirection.Out:表示只收集以该顶点为起点、以邻居顶点为目标点的邻居顶点的顶点 ID 和顶点信息。
② EdgeDirection.In:表示只收集以邻居顶点作为起点、以该点作为目标点的邻居顶点的顶点 ID 和顶点信息。
③ EdgeDirection.Either:收集所有邻居顶点的顶点 ID 和顶点信息。
分别使用3种参数查询用户社交网络图中每个顶点的邻居顶点的顶点ID和顶点属性。
(2)collectNeighborlds() 方法的使用方式与 collectNeighbors()方法的使用方式一致,但collectNeighborlds0)方法只返回顶点 ID。
(3)aggregateMessages(
图分析任务的关键步骤之一是汇总每个顶点附近的信息。aggregateMessages()方法是Graphx 中的核心聚合操作,主要功能是向其他顶点发消息,聚合每个顶点收到的消息,返回VertexRDD[A]类型的结果,A 为某种数据类型。
在 aggregateMessages()方法中,会将用户定义的 sendMsg 函数应用到图的每个边三元
组,并对其目标点应用 mergeMsg 函数聚合数据。具体过程如下。 ① 将 sendMsg 函数看作 Hadoop 的 MapReduce 过程中的 Map 阶段,负责向邻边发消息。函数的左侧为每个边三元组,包括边的起点、目标点、属性,以及起点的属性和目标点的属性;右侧为需要发送的顶点类型以及发送的信息。对每一个三元组的起点和目标点中的至少一个顶点发送一个或多个消息,对应方法为sendToSrc()和 sendToDst()。 ② 将用户自定义的 mergeMsg 函数应用于每一个顶点,对 sendMsg 过程中发送到各顶点的数据进行合并。合并的函数的运行原理是将发送的两个消息合并为一个消息后再加入一个新的消息,与之前得到的消息进行合并,直至所有消息处理完毕。可以将mergeMsg函数看作 MapReduce 过程中的 Reduce 阶段。
③ TripletFields 参数可指出哪些数据将被访问,有3种可选择的值,即 TripletFields.SrcTripletFields.Dst 和 TripletFields.All,分别表示源顶点特征、目标点特征和两者同时。因此TripletFields 参数的作用是通知 GraphX 仅仅需要 EdgeContext 的一部分参与计算TripletFields 是一个优化的连接策略。
(4)joinVertices
joinVertices()方法用于连接其他顶点,将其他顶点的顶点信息与图中的顶点信息处理后,更新图的顶点信息。其返回值的类型是图结构顶点属性的类型,顶点个数不能新增也不可以减少,即不能改变原始图结构顶点属性的类型和个数。
将外部存放顶点的 RDD与图进行连接,对应于图结构中的某些顶点,若 RDD 中无对应的属性,则保留图结构中原有属性值,不进行任何改变。
对应于图结构中某些顶点,若 RDD 中对应的值不只一个,则只有最后一个值在进行连接操作时起作用。这种情况下,可以选择先对顶点 RDD进行处理,确保顶点不重复。
(5)outerJoinVertices()
与使用 joinVertices()方法的不同之处在于,使用 outerJoinVertices()方法后,顶点属性更新后的类型和个数可以与原先图中顶点属性的类型和个数不同。在outerJoinVertices()方法中,使用者可以随意定义想要的返回类型,从而可以完全改变图的顶点属性的类型和个数。