GraphX显示了保存在图中的顶点和边的RDD。然而,因为GraphX包含的顶点和边拥有优化的数据结构,这些数据结构提供了额外的功能,所以顶点和边分别返回VertexRDD和EdgeRDD。
1.VertexRDD
VertexRDD[A]继承自RDD[(VertexID,A)],并且添加了额外的限制,那就是每个VertexID只能出现一次。此外,VertexRDD[A]代表了一组属性类型为A的顶点。在内部,是通过保存顶点属性到一个可重复使用的hash-map数据结构来获得的。所以如果两个VertexRDD从相同的基本VertexRDD获得(如通过filter或者mapValues),它们能够在固定的时间内连接而不需要hash评价。为了利用这个索引数据结构,VertexRDD提供了以下附加的功能,如【例4-32】所示。
【例4-32】VertexRDD的附加功能示例。
举个例子,filter操作如何返回一个VertexRDD。过滤器实际使用一个BitSet实现,因此它能够重用索引以及保留和其他VertexRDD进行连接时速度快的能力。同样mapValues操作不允许map函数改变VertexID,因此可以保证相同的HashMap数据结构能够重用。当连接两个从相同的hashmap获取的VertexRDDs和使用线性扫描而不是昂贵的点查找实现连接操作时,leftJoin和innerJoin都能够使用。
从RDD[(VertexID,A)]高效地构建一个新的VertexRDD,aggregateUsingIndex操作是有用的。概念上,如果通过一组顶点构造了一个VertexRDD[B],而VertexRDD[B]是一些RDD[(VertexID,A)]中顶点的超集,那么就可以在聚合以及随后索引RDD[(VertexID,A)]中重用索引,如【例4-33】所示。
【例4-33】RDD[(VertexID,A)]重用索引示例。
举个例子,filter操作如何返回一个VertexRDD。过滤器实际使用一个BitSet实现,因此它能够重用索引以及保留和其他VertexRDD进行连接时速度快的能力。同样mapValues操作不允许map函数改变VertexID,因此可以保证相同的HashMap数据结构能够重用。当连接两个从相同的hashmap获取的VertexRDDs和使用线性扫描而不是昂贵的点查找实现连接操作时,leftJoin和innerJoin都能够使用。
从RDD[(VertexID,A)]高效地构建一个新的VertexRDD,aggregateUsingIndex操作是有用的。概念上,如果通过一组顶点构造了一个VertexRDD[B],而VertexRDD[B]是一些RDD[(VertexID,A)]中顶点的超集,那么就可以在聚合以及随后索引RDD[(VertexID,A)]中重用索引,如【例4-33】所示。
【例4-33】RDD[(VertexID,A)]重用索引示例。 (www.xing528.com)
2.EdgeRDD
EdgeRDD[ED]继承自RDD[Edge[ED]],使用定义在PartitionStrategy的各种分区策略中的一个在块分区中组织边。在每个分区中,边属性和相邻结构被分别保存,这能使当属性值改变时,它们可以最大化的重用。
EdgeRDD展示了3个额外的函数,代码如下。
2.EdgeRDD
EdgeRDD[ED]继承自RDD[Edge[ED]],使用定义在PartitionStrategy的各种分区策略中的一个在块分区中组织边。在每个分区中,边属性和相邻结构被分别保存,这能使当属性值改变时,它们可以最大化的重用。
EdgeRDD展示了3个额外的函数,代码如下。
在大多数的应用中,EdgeRDD操作可以通过图操作者或者定义在基本RDD中的操作来完成。
在大多数的应用中,EdgeRDD操作可以通过图操作者或者定义在基本RDD中的操作来完成。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。