大数据全系列 教程
1869个小节阅读:467.2k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
package com.itbaizhan.core.example
import java.text.SimpleDateFormat
import org.apache.spark.{SparkConf, SparkContext}
object FindCarTrackerInfos {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
conf.setMaster("local[1]")
conf.setAppName("FindCarTrackerInfos")
val sc = new SparkContext(conf)
//2030-07-14 0005 99311 鲁A17158 2030-07-14 14:04:42 127 14 02
val monitorInfos = sc.textFile("data/core/monitor_flow_action")
//找出卡扣0001下通过的所有车辆信息
val allCars: Array[String] = monitorInfos.filter(
line=>{"0001".equals(line.split("\t")(1))})
.map(line=>{line.split("\t")(3)})
.distinct().collect()
//分析车辆轨迹
monitorInfos.filter(line=>{
//获取0001卡口下通过车辆的所有数据
val car = line.split("\t")(3)
allCars.contains(car)
}).map(line=>{
//将日志数据转为二元组,便于后续分组
val car = line.split("\t")(3)
(car,line)
}).groupByKey()//将同一个车牌数据分为一组
.map(tp=>{
val car = tp._1
val list: List[String] = tp._2.toList
//将同一车按照时间升序排序
val sortedList: List[String] = list.sortWith((s1, s2) => {
//获取时间字符串
val actionTime1 = s1.split("\t")(4)
val actionTime2 = s2.split("\t")(4)
//转换为日期类型
val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val time1 = sdf.parse(actionTime1)
val time2 = sdf.parse(actionTime2)
//比较大小,顺序不对的话调换一下顺序
time1.before(time2)
})
//拼接轨迹字符串 卡口1_时间1->卡口2_时间2->...->
var carTracker = ""
for(line <- sortedList){
carTracker += line.split("\t")(1)+"_"+line.split("\t")(4)+"->"
}
//封装为二元组(车牌号,轨迹字符串并去掉最后面的两个字符->)
(car,carTracker.substring(0,carTracker.length-2))
}).foreach(tp=>{
println(s"car = ${tp._1} ,carTracker = ${tp._2}")
})
}
}