文章目录

  • 1、如下图所示的航班表,解决以下问题:
  • 2、思路如下:
  • 3、代码如下:
  • 4、代码如下:

1、如下图所示的航班表,解决以下问题:

  • 统计航班飞行网图中机场的数量
  • 统计航班飞行网图中航线的数量
  • 计算最长的飞行航线(Point to Point)
  • 找出最繁忙的机场
  • 找出最重要的飞行航线(PageRank)
  • 找出最便宜的飞行航线(SSSP)

2、思路如下:

  • 根据机场信息和航线信息,构建Graph
  • 直接使用Graph的numVertices、numEdges方法求出机场和航线的数量
  • 最长航线,即为点边点三元视图的信息,直接对边的属性进行排序取第一个即可
  • 最繁忙机场,即为图的入度和出度最高的节点inDegrees,outdegrees
  • 找出最重要的飞行航线,使用PageRank求出图中每个节点的权重,并join上机场RDD排序即可
  • 找出最便宜的飞行航线,使用Pregel函数,找出最短距离即可

3、代码如下:

    val spark = SparkSession.builder().master("local[*]").appName(this.getClass.getSimpleName).getOrCreate()val sc = spark.sparkContextval f = sc.textFile("D:\\JavaProjects\\ClassStudy\\Scala\\sparkdemo\\files\\08filght\\USA Flight Datset - Spark Tutorial - Edureka.csv")//把表头取出,然后过滤不等于表头的,即可去掉表头val header = f.first()val flightsRDD = f.filter(!_.equals(header)).map(x => x.split(","))//使用Spark GraphX完成下列任务//探索航班飞行网图数据//构建航班飞行网图val airports = flightsRDD.flatMap(x => Array((x(5).toLong, x(6)), (x(7).toLong, x(8)))).distinct()val lines = flightsRDD.map(x => (x(5).toLong, x(7).toLong, x(16).toInt)).distinct.map(x => Edge(x._1, x._2, x._3))val nowhere = "nowhere"val graph = Graph(airports, lines, nowhere)//统计航班飞行网图中机场的数量val numAirports = graph.numVertices//统计航班飞行网图中航线的数量val numLines = graph.numEdges//计算最长的飞行航线(Point to Point)val maxLine = graph.triplets.sortBy(_.attr, false).map(x => "出发点:%s,目的地:%s,距离:%d".format(x.srcAttr, x.dstAttr, x.attr)).take(1)(0)println(s"机场的数量:${numAirports},航线的数量:${numLines},最长的飞行航线:${maxLine}")//找出最繁忙的机场val (apId1, indegrees) = graph.inDegrees.sortBy(_._2, false).take(1)(0)airports.filter {case (id, name) => id == apId1}.collect {case (id, name) => "入度最高的机场为 %s ,入度为 %d".format(name, indegrees)}.foreach(println(_))val (apId2, outdegrees) = graph.outDegrees.sortBy(_._2, false).take(1)(0)airports.filter {case (id, name) => id == apId2}.collect {case (id, name) => "出度最高的机场为 %s ,出度为 %d".format(name, outdegrees)}.foreach(println(_))//找出最重要的飞行航线(PageRank)graph.pageRank(0.005).vertices.join(airports).sortBy(_._2._1, false).map(x => (x._2._2, x._2._1)).take(3).foreach(println(_))//找出最便宜的飞行航线(SSSP)//Pricing Model: price = 180.0 + distance * 0.15val sourceId = 0Lval initGrapg = graph.mapVertices((id, _) => if (id == sourceId) 0 else Double.PositiveInfinity)//Pregel传入三个函数:// 1、定义接收消息的处理方法// 2、定义发送消息的处理方法// 3、定义接收多条消息的合并方法val sssp = initGrapg.pregel(Double.PositiveInfinity)((id, dist, newDist) => math.min(dist, newDist),triplet => {if (triplet.srcAttr + triplet.attr < triplet.dstAttr)Iterator((triplet.dstId, triplet.srcAttr + triplet.attr))elseIterator.empty},(dist1, dist2) => math.min(dist1, dist2))sssp.triplets.sortBy(_.attr, true).take(1).foreach(x => println(s"最便宜价格为:${x.attr * 0.15 + 180.0},距离为:${x.attr}"))

4、代码如下:

Spark GraphX-航班飞行网图分析相关推荐

  1. Spark GraphX 中的PageRank算法、pregel函数、航班飞行网图分析

    PageRank算法 PageRank算法原理剖析及Spark实现 - 简书 (jianshu.com) import org.apache.spark.SparkContext import org ...

  2. Spark项目模拟——航班飞行网图分析

    文章目录 Spark项目模拟--航班飞行网图分析 需求描述 数据准备 需求思路整理 代码实现 总结 机场数量: 航线数量: 最大的边属性: 哪个机场到达航班最多: 找出最重要的飞行航线: 找出最便宜的 ...

  3. 项目实战 航班飞行网图分析

    数据资料提取的地点 链接:https://pan.baidu.com/s/1WZlECyIjDyMwdVeyY2Gfqg  提取码:1111  训练的技能点 Spark GraphX API Spar ...

  4. 【Spark GraphX】社交网图分析

    目录 一.数据 1.数据关系图 2. 数据说明 3.顶点表 4.边表 二.需求 三.需求实现 1.构造fans网图 2.找出年龄大于30岁的顶点 3.找出边属性大于5的边 4.将每个顶点的年龄+20 ...

  5. sparkGraphx-航班飞行网图分析

    文章目录 数据格式 构建航班飞行网图 数据格式 文件格式为CSV,字段之间分隔符为"," 依次为:#日.周#.航空公司.飞机注册号.航班号.起飞机场编号.起飞机场.到达机场编号.到 ...

  6. Spark GraphX图计算入门

    一.什么是图计算 图计算,可以简单理解为以图这种数据结构为基础,整合相关算法来实现对应应用的计算模型.社交网络中人与人之间的关系,如果用计算机数据结构表示,最合适的就是图了.其中图的顶点表示社交中的人 ...

  7. libgrape-lite: 提供 GraphScope 的图分析能力

    GraphScope 的图分析引擎源自于 GRAPE 系统.本文介绍 GRAPE 的开源实现:高性能并行图分析 C++ 库 libgrape-lite.该图计算库具有性能优越.易用性好.模块化设计.支 ...

  8. Spark GraphX相关使用方法

    Spark GraphX是一个分布式图处理框架,Spark GraphX基于Spark平台提供对图计算和图挖掘简洁易用的而丰富多彩的接口,极大的方便了大家对分布式图处理的需求.Spark GraphX ...

  9. Spark GraphX 图算法的理解

    Spark GraphX是一个分布式图处理框架,基于 Pregel 接口实现了常用的图算法.包括 PageRank.SVDPlusPlus.TriangleCount. ConnectedCompon ...

最新文章

  1. 机器学习是科学还是“炼金术”?
  2. 数据中设计中的范式与反范式
  3. RMAN干掉热备份#OCP试验1#
  4. jenkins安装和使用
  5. 缓冲区溢出以及缓冲区溢出攻击
  6. 华为p40论坛_花粉俱乐部网友:华为P40千万别上双扬声器,小米10方向错了
  7. tarjan算法_【朝夕的ACM笔记】树上问题-最近公共祖先-倍增算法
  8. Linux Kernel Development——列出系统中所有的进程
  9. pycharm安装包时各种报错,且pip无法安装
  10. jdk1.8新特性(五)——Stream
  11. TYVJ P1012 火柴棒等式 Label:枚举
  12. Linux c开发工程师的面试题,C+工程师常见的面试题总结
  13. 元宇宙相关的前端技术
  14. 高新区 中国智慧城市大数据创新联盟揭牌
  15. Verilog写一个对数计算模块Log2(x)
  16. Hi Developer,您有一份来自华为云学院的微服务开发攻略请查收
  17. TortoiseGit拉取gitee代码
  18. 广东电大计算机绘图试题,电大CAD计算机绘图本实验1小抄参考
  19. EasyExcel读写Excel
  20. 设置canvas画布大小

热门文章

  1. 【C语言】a+aa+aaa+...+aa...a=?
  2. 图的最短路径问题(C++)
  3. C语言strlen()函数用法
  4. element-ui中el-container容器与div布局区分
  5. Matlab中strcat函数使用
  6. Linux 查看ip没有ens33解决方法
  7. 我的一百个2019(三):2019,我赚钱了!
  8. redis 失效时间单位是秒还是毫秒_redis键过期时间的应用
  9. MxNet系列——Windows上安装MxNet
  10. vi与gedit的区别