这里写自定义目录标题
0.前言
本篇博客自用,部分内容只包含概念,并且博主本身有一定spark和图论基础,部分模糊的地方,可自行查询。
1.概念
1.1 图计算的优势
- 基于内存实现了数据的复用与快速读取
- 统一了图视图和表视图
- 与spark框架上的组件无缝集成
1.2 图存储格式
- 边分割(Edge-Cut):每个顶点都存储一次,但有的边会被打断分到两台机器上。这样做的好处是节省存储空间;坏处是对图进行基于边的计算时,对于一条两个顶点被分到不同机器上的边来说,要跨机器通信传输数据,内网通信流量大
- 点分割(Vertex-Cut):每条边只存储一次,都只会出现在一台机器上。邻居多的点会被复制到多台机器上,增加了存储开销,同时会引发数据同步问题。好处是可以大幅减少内网通信=
- 图计算使用的是点分割方式存储图(原来是边分割
1.3 GraphX存储模式
概念
- VertexTable(id, data):id为顶点id,data为顶点属性
- EdgeTable(pid, src, dst, data):pid为分区id,src为源顶点id,dst为目的顶点id,data为边属性
- RoutingTable(id, pid):id为顶点id,pid为分区id
分区策略 - RandomVertexCut
- CanonicalRandomVertexCut
- EdgePartition1D
- EdgePartition2D
特殊优化,使用稀疏点连接,保证顶点的备份数量不大于2 * sqrt(numParts)
1.4 普通概念
- vertices
- edges
- triplets
- outDegrees 出度
- inDegrees 入度
- degrees 度数
2.图的构建(待补充)
2.1 构建图的方法
- Graph.fromEdges
- Graph.fromEdgeTuples
2.2 构建图的过程
3.图的操作
- 转换操作
- mapVertices
- mapEdges
- mapTriplets
- 结构操作
- reverse
- subgraph
- mask
- groupEdges
- 关联操作
- joinVertices
- outerJoinVertices
- 聚合操作
- aggregateMessages
- mapReduceTriplets
- 缓存操作
- cache
- persist
4.算法
- pagerank算法
- 参考链接:https://www.cnblogs.com/urahyou/p/12173003.html
- 包含两个参数maxIter和tol
5.实战
5.1 项目要求
- 探索航班飞行网图数据
- 构建航班飞行网图
- 使用Spark GraphX完成下列任务
- (1)统计航班飞行网图中机场的数量
- (2)统计航班飞行网图中航线的数量
- (3)计算最长的飞行航线(Point to Point)
- (4)找出最繁忙的机场 (等价于度数最多)
- (5)找出最重要的机场(PageRank)
5.2 环境
环境 | macOS |
---|---|
spark | 3.5.0 |
scala | 2.12 |
graphframes | graphframes:0.8.3-spark3.5-s_2.12 |
python | 3.11 |
5.3 安装
参考:https://www.cnblogs.com/guoxiaoyu/p/17972877
- python库要使用graphframes-latest。(python参考的:https://www.cnblogs.com/guoxiaoyu/p/17972877)
- jars包库下载:https://graphframes.github.io/graphframes/docs/_site/index.html
- java.lang.NoClassDefFoundError: scala/collection/ArrayOps改为scala2.12即可。
5.4 代码
数据来源:https://blog.csdn.net/weixin_45440484/article/details/130557622
代码地址:https://github.com/ikiwixx/graphs_fly/blob/main/fly.ipynb
5.5 最终结果
机场数量: 301
航线数量: 4088
最长的飞行航线:(12173 -> 12478: 4983)
最繁忙的机场: (10397度数为305)
最重要的机场: (10397, pagerank: 10.372143)
参考链接
- 概念方面:https://www.cnblogs.com/zhanghuicheng/p/11484200.html
- 视频:https://www.bilibili.com/video/BV1s4411e7Pz