博客
关于我
Spark Graph基础
阅读量:178 次
发布时间:2019-02-27

本文共 1523 字,大约阅读时间需要 5 分钟。

GraphX框架技术文档

图(Graph)的基本概念

1.1 图的概念

图是一种由顶点集合和顶点间的关系集合(边)组成的网状数据结构,通常表示为二元组G=(V, E),其中V表示顶点,E表示边。图非常适合建模事物之间的关系,并能很好地表达数据之间的关联性。

1.2 应用场景

图的应用场景包括:

  • 地图应用中寻找最短路径
  • 社交网络关系建模
  • 网页间超链接关系

1.3 弹性分布式属性图

GraphX采用弹性分布式属性图作为核心抽象,支持有向多重图,带有连接到每个顶点和边的用户定义的对象。弹性分布式图计算类似于分布式数据计算,但通过顶点分割来实现并发目标。每个顶点使用唯一的64位长的VertexID作为标识,GraphX对顶点标识没有强加排序要求。

图的构建

2.1 图的基本属性

Graph[VD, ED]类定义了图的核心属性:

class Graph[VD, ED] {   val vertices: VertexRDD[VD]   val edges: EdgeRDD[ED]   val triplets: RDD[EdgeTriplet[VD, ED]] }

其中:

  • VertexRDD[VD]存储顶点数据,包含顶点ID和顶点属性。
  • EdgeRDD[ED]存储边数据,包含源顶点ID、目标顶点ID和边属性。
  • EdgeTriplet[VD, ED]是一个三元组视图,包含源顶点属性、边属性和目标顶点属性。

2.2 GraphX的图存储模式

GraphX采用Vertex-Cut存储模式,使用以下三个表:

  • VertexTable(id, data):存储顶点ID和顶点属性。
  • EdgeTable(pid, src, dst, data):存储分区ID、源顶点ID、目标顶点ID和边属性。
  • RoutingTable(id, pid):存储顶点ID和分区ID。
  • 2.3 图信息算子

    常用图信息算子包括:

    • 查看顶点数量:graph.numVertices
    • 查看边数量:graph.numEdges
    • 查看入度和出度:graph.inDegrees、graph.outDegrees
    • 查看顶点度数:graph.degrees

    2.4 图操作

    GraphX支持丰富的图操作:

    • 顶点操作:mapVertices、joinVertices
    • 边操作:mapEdges、groupEdges
    • 图反转:reverse
    • 子图构造:subgraph
    • 连接操作:joinVertices、outerJoinVertices

    2.5 案例

    以下案例展示了GraphX的核心功能:

    • 打印图的顶点和边信息。
    • 计算用户粉丝数量。
    • 找出社交网络中最重要的用户。
    • PageRank算法应用。

    连通分量

    3.1 连通分量概念

    连通分量是一个子图,其中任何两个顶点通过边或边序列相互连接。连通分量的顶点是原始图顶点集的子集,边是原始图边集的子集。

    3.2 案例

    以下案例展示了如何计算连通分量:

    • 使用connectedComponents方法计算连通分量。
    • 打印连通分量的顶点和边信息。

    Pregel框架

    4.1 Pregel框架概述

    Pregel是一种面向图算法的分布式编程框架,采用迭代计算模型,通过消息传递进行并行计算。每一轮顶点接收消息,更新自身状态,并向邻居发送消息。

    4.2 PageRank应用

    Pregel框架可以用于PageRank算法,评估网页重要性。顶点接收消息计算PR值,向邻居发送消息更新其PR值。

    4.3 案例

    以下案例展示了Pregel框架的应用:

    • 计算图中的最小值。
    • 单源最短路径计算。

    通过以上内容,可以全面了解GraphX框架的核心功能和应用场景。

    转载地址:http://pwqb.baihongyu.com/

    你可能感兴趣的文章
    python 内部如何实现命名元组?
    查看>>
    python 写入json数据到数据库
    查看>>
    Python 列表删除相同的元素
    查看>>
    Python 初学者需要知道的四条建议
    查看>>
    Python 判断字符串是否包含子字符串
    查看>>
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>
    python 基于 wordcloud + jieba + matplotlib 生成词云
    查看>>
    python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
    查看>>