需求概述
探索航班飞行网图数据
构建航班飞行网图
使用Spark GraphX完成下列任务
-
统计航班飞行网图中机场的数量
-
统计航班飞行网图中航线的数量
-
计算最长的飞行航线(Point to Point)
-
找出最繁忙的机场
-
找出最重要的飞行航线(PageRank)
-
找出最便宜的飞行航线(SSSP)
数据探索
下载数据
链接: https://pan.baidu.com/share/init?surl=RUTXwr7Nqeg5cp8S8Tp0YA
提取码:gvyd
数据格式
-
文件格式为CSV,字段之间分隔符为“,”
-
依次为:#日、周#、航空公司、飞机注册号、航班号、起飞机场编号、起飞机场、到达机场编号、到达机场、预计起飞时间(时分)、起飞时间、起飞延迟(分钟)、到达预计时间、到达时间、到达延迟(分钟)、预计飞行时间、飞行距离
项目实战
构建航班飞行网图
-
创建属性图Graph[VD,ED]
-
装载CSV为RDD,每个机场作为顶点。关键字段:起飞机场编号、起飞机场、到达机场编号、到达机场、飞行距离
-
初始化顶点集airports:RDD[(VertexId,String)],顶点属性为机场名称
-
初始化边集lines:RDD[Edge],边属性为飞行距离
scala> import org.apache.spark.graphx._
scala> val flight = sc.textFile("file:///opt/kb09file/fly.csv").map(x =>x.split(","))
flight: org.apache.spark.rdd.RDD[String] = file:///opt/kb09file/fly.csv MapPartitionsRDD[3] at textFile at <console>:30
scala> flight.count
res1: Long = 439620
// 航班((起飞机场编号,起飞机场),(到达机场编号,到达机场))
scala> val airport = flight.flatMap(x => Array((x(5).toLong,x(6)),(x(7).toLong,x(8)))).distinct
airport