SparkGraphX图计算(二)

本文深入探讨了SparkGraphX中的图计算基本概念,包括vertices、edges和triplets,以及图的分类,如有向图、无向图、有环图等。此外,还介绍了图的存储方式,如边分割存储、点分割存储和邻接矩阵存储,重点讨论了GraphX的存储模式,如RandomVertexCut、CanonicalRandomVertexCut等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、图计算基本概念

vertices、edges以及triplets是GraphX中三个非常重要的概念。

注意:在GraphX框架中即使是 Int 或 String 类型,也必须要指定VD和ED的具体类型。这可认为是GraphX 的一个小的限制:不支持"缺少属性"的图,即图必须要有顶点和边属性。如果在实际场景中,你的图不需要顶点属性和边属性,可以进行最简单的处理,如将 Int 作为参数的类型,并为每条边和每个顶点设置相同的默认值。

1、vertices

在GraphX中,vertices对应着名称为VertexRDD的RDD。这个RDD有顶点id和顶点属性两个成员变量。它的源码如下所示:

abstract class VertexRDD[VD](sc: SparkContext, deps: Seq[Dependency[_]]) extends RDD[(VertexId, VD)](sc, deps)

从源码中我们可以看到,VertexRDD继承自RDD[(VertexId, VD)],这里VertexId表示顶点id,VD表示顶点所带的属性的类别。这从另一个角度也说明VertexRDD拥有顶点id和顶点属性。

2、edges

在GraphX中,edges对应着EdgeRDD。这个RDD拥有三个成员变量,分别是源顶点id、目标顶点id以及边属性。它的源码如下所示:

abstract class EdgeRDD[ED](sc: SparkContext, deps: Seq[Dependency[_]]) extends RDD[Edge[ED]](sc, deps)

从源码中我们可以看到,EdgeRDD继承自RDD[Edge[ED]],即类型为Edge[ED]的RDD。

3、triplets

在GraphX中,triplets对应着EdgeTriplet。它是一个三元组视图,它的属性提供了原顶点ID、原顶点的属性、边属性、目标定点ID和目标定点属性,Triplets其实是对Vertices和Edges作了连接操作。
这个视图逻辑上将顶点和边的属性保存为一个RDD[EdgeTriplet[VD, ED]]。可以通过下面的Sql表达式表示这个三元视图的含义:

SELECT src.id ,dst.id ,src.attr ,e.attr ,dst.attr FROM edges AS e LEFT JOIN vertices AS src , vertices AS dst ON e.srcId = src.Id
AND e.dstId = dst.Id

同样,也可以通过下面图解的形式来表示它的含义:
在这里插入图片描述
EdgeTriplet的源代码如下所示:

class EdgeTriplet[VD, ED] extends Edge[ED] {
   
  //源顶点属性
  var srcAttr: VD = _ // nullValue[VD]
  //目标顶点属性
  var dstAttr: VD = _ // nullValue[VD]
  protected[spark] def set(other: Edge[ED]): EdgeTriplet[VD, ED] = {
   
    srcId = other.srcId
    dstId = other.dstId
    attr 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘金超DT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值