spark graphx自用学习笔记及pyspark项目实战(基于GraphX的航班飞行网图分析)

0.前言

本篇博客自用,部分内容只包含概念,并且博主本身有一定spark和图论基础,部分模糊的地方,可自行查询。

1.概念

1.1 图计算的优势

  1. 基于内存实现了数据的复用与快速读取
  2. 统一了图视图和表视图
  3. 与spark框架上的组件无缝集成

1.2 图存储格式

  1. 边分割(Edge-Cut):每个顶点都存储一次,但有的边会被打断分到两台机器上。这样做的好处是节省存储空间;坏处是对图进行基于边的计算时,对于一条两个顶点被分到不同机器上的边来说,要跨机器通信传输数据,内网通信流量大
  2. 点分割(Vertex-Cut):每条边只存储一次,都只会出现在一台机器上。邻居多的点会被复制到多台机器上,增加了存储开销,同时会引发数据同步问题。好处是可以大幅减少内网通信=
  3. 图计算使用的是点分割方式存储图(原来是边分割

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
spark3.5.0
scala2.12
graphframesgraphframes:0.8.3-spark3.5-s_2.12
python3.11

5.3 安装

参考:https://www.cnblogs.com/guoxiaoyu/p/17972877

  1. python库要使用graphframes-latest。(python参考的:https://www.cnblogs.com/guoxiaoyu/p/17972877)
  2. jars包库下载:https://graphframes.github.io/graphframes/docs/_site/index.html
  3. 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
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值