数据资料提取的地点

链接:https://pan.baidu.com/s/1WZlECyIjDyMwdVeyY2Gfqg 
提取码:1111 

训练的技能点

Spark GraphX API Spark GraphX PageRank Spark GraphX Pregel

需求概述 探索航班飞行网图数据 构建航班飞行网图 使用Spark GraphX完成下列任务 统计航班飞行网图中机场的数量 统计航班飞行网图中航线的数量 计算最长的飞行航线(Point to Point) 找出最繁忙的机场 找出最重要的飞行航线(PageRank) 找出最便宜的飞行航线(SSSP)

下载数据(USA Flight Dataset) https://drive.google.com/file/d/0B7Yoht-ttAeuaWdGZkRsSkVkN00/view 数据格式 文件格式为CSV,字段之间分隔符为“,” 依次为:#日、周#、航空公司、飞机注册号、航班号、起飞机场编号、起飞机场、到达机场编号、到达机场、预计起飞时间(时分)、起飞时间、起飞延迟(分钟)、到达预计时间、到达时间、到达延迟(分钟)、预计飞行时间、飞行距离

问题分析2:构建航班飞行网图

\创建属性图Graph[VD,ED] 装载CSV为RDD,每个机场作为顶点。关键字段:起飞机场编号、起飞机场、到达机场编号、到达机场、飞行距离 初始化顶点集airports:RDD[(VertexId,String)],顶点属性为机场名称 初始化边集lines:RDD[Edge],边属性为飞行距离

问题分析3:统计航班飞行网图中机场与航线的数量

机场数量 求顶点个数:Graph.numVertices 航线数量 求边的个数:Graph.numEdges

问题分析4:计算最长的飞行航线

最大的边属性 对triplets按飞行距离排序(降序)并取第一个

问题分析5:找出最繁忙的机场

哪个机场到达航班最多 计算顶点的入度并排序

问题分析6:找出最重要的飞行航线

PageRank 收敛误差:0.05

问题分析7:找出最便宜的飞行航线

定价模型 price = 180.0 + distance * 0.15 SSSP问题 从初始指定的源点到达任意点的最短距离 pregel 初始化源点(0)与其它顶点(Double.PositiveInfinity) 初始消息(Double.PositiveInfinity) vprog函数计算最小值 sendMsg函数计算进行是否下一个迭代 mergeMsg函数合并接受的消息,取最小值

技能总结

Spark GraphX API vertices、edges、triplets、 numEdges、numVertices inDegrees、outDegrees、degrees mapVertices、mapEdges、mapTriplets Spark GraphX PageRank Spark GraphX Pregel

USAFlightDatset-SparkTutorial-Edureka.csv-互联网文档类资源-CSDN下载资源地址

代码实现

package cn.kgc.spark.graphXimport org.apache.spark.graphx.{Edge, Graph}
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSessionobject GraphXFlights {def main(args: Array[String]): Unit = {val spark: SparkSession = SparkSession.builder().appName(this.getClass.getName).master("local[4]").getOrCreate()val sc: SparkContext = spark.sparkContext//数据加载   csvval lines: RDD[String] = sc.textFile("file:///D:\\mypro\\hangban\\data\\USA Flight Datset - Spark Tutorial - Edureka.csv").repartition(1)//获取首行val firstline: String = lines.first()//    lines.filter(_ != firstline).take(10).foreach(println)//去掉表头 思路,和首行一样的 就去掉val flights: RDD[Array[String]] = lines.filter(_ != firstline).map(_.split(","))//    通过机场构建点集合val airports: RDD[(Long, String)] = flights.flatMap(x => Array((x(5).toLong, x(6)), (x(7).toLong, x(8))))//通过航线构建边集合val airlines: RDD[Edge[Int]] = flights.map(x => (x(5).toLong, x(7).toLong, x(16).toInt)).distinct().map(x => Edge(x._1, x._2, x._3))//通过飞机场和航线构建图结构val graph = Graph(airports, airlines, "unknow")//1统计航班飞行网图中机场的数量val numAirports: Long = graph.numVerticesprintln("1统计航班飞行网图中机场的数量:")println(numAirports)//2统计航班飞行网图中航线的数量val numRoutes = graph.numEdgesprintln("2统计航班飞行网图中航线的数量:")println(numRoutes)//3计算最长的飞行航线(Point to Point)println("3计算最长的飞行航线:")graph.triplets.sortBy(_.attr, false).take(1).foreach(println)//      ((12173,HNL),(12478,JFK),4983)//4找出最繁忙的机场println("4找出最繁忙的机场: 入和出")graph.inDegrees.sortBy(_._2, false).take(1).foreach(println)graph.outDegrees.sortBy(_._2, false).take(1).foreach(println)//    (10397,152)//    (10397,153)//5找出最重要的飞行航线(PageRank)println("5找出最重要的飞行航线(PageRank)")graph.pageRank(0.05).vertices.takeOrdered(3)(Ordering.by(_._2)).foreach(println)////    (11695,0.29483238699643666)//    (14905,0.29766715072369493)//    (11041,0.29766715072369493)//6找出最便宜的飞行航线(SSSP)println("6找出最便宜的飞行航线(SSSP)")graph.mapEdges(e => 180.0 * e.attr * 0.15)//赋给源点一个初值,0.0 其他点赋无穷大.mapVertices((id, attr) => if (id == 12478) 0.0 else Double.PositiveInfinity).pregel(Double.PositiveInfinity)(//接受消息时的处理函数(id, dist, new_dist) => math.min(dist, new_dist),//发送消息的处理函数triplet => {//如果当前点的价格+边长点的价格<小于目标点已有的价格就发送消息if (triplet.srcAttr + triplet.attr < triplet.dstAttr)Iterator((triplet.dstId, triplet.srcAttr + triplet.attr))else Iterator.empty},//合并消息的函数,求最小值(a, b) => Math.min(a, b)//取价格最便宜的三个遍历).edges.takeOrdered(3)(Ordering.by(_.attr)).foreach(println)}}

项目实战 航班飞行网图分析相关推荐

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

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

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

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

  3. Spark GraphX-航班飞行网图分析

    文章目录 1.如下图所示的航班表,解决以下问题: 2.思路如下: 3.代码如下: 4.代码如下: 1.如下图所示的航班表,解决以下问题: 统计航班飞行网图中机场的数量 统计航班飞行网图中航线的数量 计 ...

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

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

  5. Spark项目实战—电商用户行为分析

    文章目录 一.[SparkCore篇]项目实战-电商用户行为分析 前言:数据准备 1.数据规则如下: 2.详细字段说明: 3.样例类 (一)需求1:TOP10热门品类 1.需求说明 2.代码实现方案1 ...

  6. 【网络通信 -- 直播】项目实战记录 -- 弱网模拟工具

    [网络通信 -- 直播]项目实战记录 -- 弱网模拟工具 [1]Windows 系统中弱网模拟工具 Windows 系统中可以使用 Clumsy 工具模拟弱网环境 Lag(延迟),把数据包缓存一段时间 ...

  7. 美工效果图大小 html,六、DIV CSS实战之布局美工图分析与切图

    DIV CSS实战之布局分析与切图 美工图到DIV CSS制作成HTML中间必不可少的步骤为对美工图的分析和美工图的切图.平时大家说切图也是从这个步骤捡取的一个词语来代表css完整制作的代名词,就像d ...

  8. 项目实战——仿360囧图

    一.项目实战 1.创新从模仿开始,咱们的第一综合实例就从模仿网页-360囧图开始,网址:http://xiaohua.360.cn/jiongtu 2.第一个项目采用固定浮动布局,单位为像素. 3.由 ...

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

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

最新文章

  1. Python+OpenCV实现自动扫雷,创造属于自己的世界记录!
  2. 一般物流网站建设有哪些必备版块?
  3. linux重启终端后go命令,Linux基础命令之关机,重启,注销-Go语言中文社区
  4. BZOJ 3489: A simple rmq problem
  5. python 线性回归 优化_python – 线性回归实现总是比sklearn更糟糕
  6. C之memset、memcpy、strcpy、strncpy区别
  7. C++的迭代器Interator
  8. repo/git提交代码
  9. 分段锁——ConcurrentHashMap
  10. uni-app 简介
  11. 计算机上面的字体怎么应用,字魂字体怎么放PS里面用 应用到PS的方法
  12. OpenCV学习之路(附加资料分享)
  13. 毕业设计-基于SpringBoot幼儿园管理系统
  14. Android studio系列:win10上Android studio4.0.2下载安装
  15. Qt error: ‘class Ui::XXXXX‘ has no member named ‘XXXXX‘
  16. googleplay刷榜和APP Store 刷榜哪些不为人知的事
  17. Altium Designer18中DDR3的数据和地址线如何分别布等长线,走蛇形线
  18. 码云果园:术后人群怎么吃水果
  19. android 手机 恢复数据恢复,恢复安卓手机丢失的数据
  20. 【转自Oracle官方博客】一个ASMCA无法识别磁盘设备的问题

热门文章

  1. 0xc000007b错误、DirectX、C++组件、缺少msvcr120.dll文件等
  2. Sql Server服务远程过程调用失败。[0x800706be]
  3. MyISAM 和 InnoDB 的区别
  4. vue+Element做表格的批量增加
  5. 现在好的测试缺陷管理工具都有哪些啊?
  6. C++计算矩阵对角线和的程序
  7. 在局域网访问 XAMPP 服务器本地主机
  8. 如何处理json数据
  9. opencv 反色处理
  10. 微信支付以及接入SDK支付