一、为什么需要图计算
- 许多大数据以大规模图或网络的形式呈现
- 许多非图结构的大数据,常会被转换为图模型进行分析
- 图数据结构很好地表达了数据之间的关联性
二、图的基本概念
- 图是由顶点集合(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 outerJoinVertices triplets
filter pageRank