一、为什么需要图计算
- 许多大数据以大规模图或网络的形式呈现
- 许多非图结构的大数据,常会被转换为图模型进行分析
- 图数据结构很好地表达了数据之间的关联性
二、图的基本概念
- 图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种网状数据结构
– 通常表示为二元组:Gragh=(V,E)
– 可以对事物之间的关系建模 - 应用场景
– 在地图应用中寻找最短路径
– 社交网络关系
– 网页间超链接关系
三、图的术语
-
顶点(Vertex)
-
边(Edge)
-
有向图
- 无向图
- 有环图
包含一系列顶点连接的回路(环路)
- 无环图
DAG即为有向无环图
- 度:一个顶点所有边的数量
出度:指从当前顶点指向其他顶点的边的数量
入度:其他顶点指向当前顶点的边的数量
四、图的经典表示法
- 邻接矩阵
1、对于每条边,矩阵中相应单元格值为1
2、对于每个循环,矩阵中相应单元格值为2,方便在行或列上求得顶点度数
五、Spark GraphX 简介
- GraphX是Spark提供分布式图计算API
- GraphX特点
1)基于内存实现了数据的复用与快速读取
2)通过弹性分布式属性图(Property Graph)统一了图视图与表视图
3)与Spark Streaming、Spark SQL和Spark MLlib等无缝衔接
六、GraphX核心抽象
弹性分布式属性图(Resilient Distributed Property Graph)
- 顶点和边都带属性的有向多重图
- 一份物理存储,两种视图
对Graph视图的所有操作,最终都会转换成其关联的Table视图的RDD操作来完成
七、GraphX API及图信息
- Graph[VD,ED]
- VertexRDD[VD]
- EdgeRDD[ED]
- EdgeTriplet[VD,ED]
- Edge:样例类
- VertexId:Long的别名
//导入spark Graph包
import org.apache.spark.graphx._
//创建 vertices 顶点rdd
val vertices = sc.makeRDD(Seq((1L,1),(2L,2),(3L,3)))
//创建 edges 边rdd
val edges = sc.makeRDD(Seq(Edge(1L,2L,1),Edge(2L,3L,2)))
//创建 graphx 对象
val graph = Graph(vertices,edges)
//图的API
graph.
aggregateMessages joinVertices pregel
cache mapEdges removeSelfEdges
checkpoint mapTriplets reverse
collectEdges mapVertices staticPageRank
collectNeighborIds mask staticParallelPersonalizedPageRank
collectNeighbors numEdges staticPersonalizedPageRank
connectedComponents numVertices stronglyConnectedComponents
convertToCanonicalEdges ops subgraph
degrees outDegrees triangleCount
edges