如同Spark本身有一个核心抽象概念RDD一样,Spark GraphX的核心抽象概念是Resili-ent Distributed Property Graph(弹性分布式属性图),即一种点和边都带有属性的有向多重图。它扩展了Spark RDD的抽象,实现了统一表示(Unified Representation)。弹性分布式属性图有Table和Graph两种视图(如图8-1所示),对应这两种视图只需要一份物理存储。两种视图都有自己独有的操作符,基于Spark的RDD可以很轻松地进行操作,从而提高了操作灵活性和执行效率。图8-2给出了Spark GraphX的Table视图和Graph视图。
图8-2 Spark GraphX的Table视图和Graph视图
在Spark GraphX中数据处理的模型就是属性图(Property Graph),一个属性图包括带属性的顶点和边,其中这些属性是用来描述顶点和边的特征的,如图8-3所示。
(www.xing528.com)
图8-3 Spark GraphX官方提供的属性图
在图8-3中,分别给出了属性图(Property Graph)和对应的两个视图,Vertex Table(顶点表)和Edge Table(边表)视图。其中,顶点属性包括名称和职业,边的属性是两个顶点之间的关系。比如顶点3的名称是rxin,职业是stu.(学生)。顶点5的名称是franlin,职业是prof.(教授)。顶点5到顶点3表示的是5是3的Advisor(指导教授)。rxin和stu.表示的是顶点3的属性,Advisor是边的属性。顶点和边都是有ID的,对于顶点的ID,是由一个唯一的64位的标识符(VertexID)作为key。而对于边来说有SourceID(源顶点ID)和DestinationID(目标顶点ID),即对于边而言会有两个ID来表示从哪个顶点出发,到哪个顶点结束,用来表明边的方向,这就是Property GraphX的表示方法。如果把Property映射到表上的话,例如在Vertex Table中ID为3的Property就是(rxin,student),而在Edge Table中,3到7表明边的Property是Collaborator关系,2到5是Colleague关系。更为重要的是Property Graph和Table之间是可以相互转换的,在GraphX中所有操作的基础是Table opera-tor和Graph operator,都是针对集合进行的操作。逻辑上的属性图对应于一对类型化的集合(VertexRDD[VD]和EdgeRDD[ED]类),分别继承和优化自RDD[(VertexID,VD)]和RDD[Edge[ED]]。VertexRDD[VD]和EdgeRDD[ED]都支持额外的功能来建立图计算和利用内部优化。
和RDD一样,属性图是不可变的、分布式的、容错的。图的值或者结构的改变会对应生成一个新的图。注意,原始图的大部分顶点数据和边数据都可以在新图中重用,用来减少数据的存储成本。在容错方面,同样和RDD一样,图中的每个分区可以在发生故障的情况下被重新创建。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。