文章目录

  • 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. solr源码导入eclipse
  4. MapReduce操作HBase
  5. PS教程第四课:PS新建文档和像素
  6. 给GridView设置行高
  7. 非暴力拆解:小熊派NB-IoT通信扩展板
  8. [转]软件企业的新三十六计
  9. 计算机二级c语言word答案,全国计算机考试二级C语言南开100题答案(Word版)
  10. 基于Python的信用评分卡模型建立和分析,万字阐述,收藏
  11. 由两个曲面确定的交线的切向量求解
  12. python语言程序设计袁方答案_北邮“爱课堂”教学平台
  13. photoshop使用技巧_你应该知道的45个聪明的Photoshop技巧
  14. Python 中文数字转英文阿拉伯数字
  15. 亿图图示----科学与软件展示
  16. 一个Flash开发者从入门到放弃的成长之路
  17. ElasticSearch java API - 聚合查询-聚合多字段聚合demo
  18. 浅谈oracle索引
  19. Sdut PTA练习 2021级-JAVA02 基础语法1--标识符、常量与变量、数据类型、运算符与表达式
  20. 工业数字化转型 — 工业机器人

热门文章

  1. cancase lin管脚_Vector CANCASE XL+CABLE 模块
  2. 【详解】位运算符:位逻辑运算符,位移运算符(<<左移,>>右移)
  3. 一、AUTOSAR概述
  4. Java将.docx文件转换为.pdf文件
  5. 京瓷p5021cdn快速复印_功率实测 节能出色_京瓷 P5021cdn_办公打印评测试用-中关村在线...
  6. 【C++常用函数】整数转字符串itoa()
  7. 2022年搭载国产芯片的手机推荐 这3款性能就不错
  8. 计算机传奇人物之詹姆斯.高斯林
  9. Libgdx介绍及环境安装
  10. 坯子库曲面推拉教程_坯子助手下载_坯子助手最新版下载-下载之家