入门大数据---Spark车辆监控项目
一、项目简介
这是一个车辆监控项目。主要实现了三个功能:
1.计算每一个区域车流量最多的前3条道路。
2.计算道路转换率
3.实时统计道路拥堵情况(当前时间,卡口编号,车辆总数,速度总数,平均速度)
二、项目结构
├─TrafficBySparkAndKafka
├─data
└─src
├─main
│ ├─java
│ │ └─vip
│ │ ├─producedate2hive(模拟数据到文件和Hive)
│ │ ├─shuai7boy
│ │ │ └─trafficTemp
│ │ │ ├─areaRoadFlow(每个区域top3道路速度统计。道路转换率。)
│ │ │ ├─conf (获取配置文件帮助类)
│ │ │ ├─constant (接口静态类,防止硬编码)
│ │ │ ├─dao
│ │ │ │ ├─factory (工厂类)
│ │ │ │ └─impl (接口实现类)
│ │ │ ├─domain (属性定义类)
│ │ │ ├─jdbc (jdbc帮助类)
│ │ │ ├─rtmroad(实时统计道路拥堵情况)
│ │ │ ├─skynet
│ │ │ └─util (帮助类)
│ │ └─spark
│ │ └─spark
│ │ └─test (模拟实时数据)
│ ├─resources
│ └─scala
│ └─top
│ └─shuai7boy
│ └─trafficTemp
│ └─areaRoadFlow (利用scala和java互调用,实现top3道路速度统计)
│
└─test
└─java
三、数据源
数据源类型:
monitor_flow_action(每个摄像头的监控数据)
当天日期 卡口编号 摄像头编号 车牌号 拍摄时间 车速 道路编号 区域编号
2020-05-08 0001 34287 京M80025 2020-05-08 05:35:58 57 25 03
2020-05-08 0005 99132 京M80025 2020-05-08 05:51:28 149 50 04
monitor_camera_info(卡口和摄像头对应编号)
0006 00443
0006 25745
0006 98681
0006 36400
存储介质:
如果在本地运行的话,这里读取的是本地文件。
如果在集群运行,对于批处理读取的是Hive,对于流处理这里读取Kafka。
四、数据转换流程
1.计算每一个区域车流量最多的前3条道路。
从表traffic.monitor_flow_action根据日期获取车流量监控日志信息。
挡在集群中时,traffic.monitor_flow_action代表的是hive中的表,当在本地运行时,traffic.monitor_flow_action是本地创建的临时表。
从area_info表中获取区域信息。
area_info是MySql中的表。
根据步骤二获取的区域信息,补全监控日志名称。根据join,map即可拼接一个新的RDD,并将RDD转换为DataFrame的临时表tmp_car_flow_basic。
统计各个区域的道路车流量。
使用Spark SQL根据区域名称,道路ID进行分组。即可统计出每个区域,每条道路对应的车流量。
统计每个区域top3车流量。
利用开窗函数进行统计。row_number() over(partition by area_name order by road_id desc)
用到的技术:Hive,Spark SQL,临时表,MySql,JDBC,join,map,RDD转换DataFrame。
2.计算道路转换率
从MySql拿出我们要对比的转换路段
从日志拿出指定日期的监控数据
将监控数据转换为键值对(car,row)格式
计算每个路段的匹配情况。
逻辑:将第三步拿到的数据,根据car进行分组,映射键值对。将轨迹信息根据时间进行排序,然后拼接。
将我们指定的路段(第一步获取到的)和上面拼接的数据进行比对,得出匹配情况。(路段,匹配次数)
因为上面求的是多辆车的 (路段,匹配次数)。这步使用reduceByKey进行聚合,将相同路段进行汇总。
获取转化率。
转换率=(这次路段的匹配度)/(上次路段的匹配度)即可得到。、
这次路段的匹配度=(聚合数据.get(路段))
用到的技术:mapToPair,groupByKey,flatMapToPair(进来一辆车,出去多个对应路段信息),reduceByKey。
3.实时统计道路拥堵情况(根据车辆和车速判断)
- 根据日志获取(卡口ID,汽车速度)格式数据
- 获取(卡口ID,(汽车速度,1))格式数据,后面的1代表车辆数
- 获取(卡口ID,(汽车总速度,总车辆数))
- 打印车辆(卡口,总速度,总车辆,平均速度)
用到的技术:map,mapToPair,mapValues(仅仅针对value进行map,(key,(value,1))格式数据),reduceByKeyAndWindow。
入门大数据---Spark车辆监控项目的更多相关文章
- 入门大数据---Spark整体复习
一. Spark简介 1.1 前言 Apache Spark是一个基于内存的计算框架,它是Scala语言开发的,而且提供了一站式解决方案,提供了包括内存计算(Spark Core),流式计算(Spar ...
- 入门大数据---Spark简介
一.简介 Spark 于 2009 年诞生于加州大学伯克利分校 AMPLab,2013 年被捐赠给 Apache 软件基金会,2014 年 2 月成为 Apache 的顶级项目.相对于 MapRedu ...
- 入门大数据---Spark开发环境搭建
一.安装Spark 1.1 下载并解压 官方下载地址:http://spark.apache.org/downloads.html ,选择 Spark 版本和对应的 Hadoop 版本后再下载: 解压 ...
- 入门大数据---Spark累加器与广播变量
一.简介 在 Spark 中,提供了两种类型的共享变量:累加器 (accumulator) 与广播变量 (broadcast variable): 累加器:用来对信息进行聚合,主要用于累计计数等场景: ...
- 入门大数据---Spark部署模式与作业提交
一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ --class <ma ...
- 王家林 大数据Spark超经典视频链接全集[转]
压缩过的大数据Spark蘑菇云行动前置课程视频百度云分享链接 链接:http://pan.baidu.com/s/1cFqjQu SCALA专辑 Scala深入浅出经典视频 链接:http://pan ...
- 《大数据Spark企业级实战 》
基本信息 作者: Spark亚太研究院 王家林 丛书名:决胜大数据时代Spark全系列书籍 出版社:电子工业出版社 ISBN:9787121247446 上架时间:2015-1-6 出版日期:20 ...
- 大数据Spark超经典视频链接全集
论坛贴吧等信息发布参考模板 Scala.Spark史上最全面.最详细.最彻底的一整套视频全集(特别是机器学习.Spark Core解密.Spark性能优化.Spark面试宝典.Spark项目案例等). ...
- 以慕课网日志分析为例-进入大数据Spark SQL的世界
下载地址.请联系群主 第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目 ...
随机推荐
- uni-app之uni.showToast()image路径问题
uni-app的API中,showToast的icon值只有success,loading,none三种显示,失败没有图标.如果失败时需要显示图标,就要用到自定义图标 image 了. uni.sho ...
- GNS3内网通过cloud与实际网络实现互连互通的实验(使用环回网口)
一.背景: 在GNS3内构建一个测试网络,该测试网络的设备能够通过cloud访问外部网络设备和Internet网,外部网络也能直接访问GNS3内网的设备. 考虑通过cloud上的环回口连接GNS3内网 ...
- DDD之3实体和值对象
图中是一个别墅的模型,代表实体,可以真实的看得到.那么在DDD设计方法论中,实体和值对象是什么呢? 背景 实体和值对象是领域模型中的领域对象,是组成领域模型的基础单元,一起实现实体最基本的核心领域逻辑 ...
- Java实现 LeetCode 2 两数相加
两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- Android如何使用SQLlite数据库
先写一个类,继承自SQLiteOpenHelper public class MyDatabaseHelper extends SQLiteOpenHelper { //声明一个Context pri ...
- 用js实现简单的抛物线运动
前言 老早就看过一些购物车的抛物线效果,也想自己凑热闹动手来实现一遍. 然后(lll¬ω¬) 书到用时方恨少,发现高中学到物理啊.数学啊,都忘光了,抛物线公式都忘了0 0. 顺手百度一波,从百度可知: ...
- jstat监控JVM内存使用、GC回收情况
jstat -gcutil 2388 3000 6 每隔3秒打印一次pid为2388的堆内存的使用情况,共打印6次 S0— Heap上的 Survivor space 0 区已使用空间的百分比 S1 ...
- 关于EF的五种状态
最近半个多月没更新原因是在赶项目...在做项目的时候就会发现自己很多问题,也有很多东西要记录,今天就记录一下对ef新的认识. 也就是关于ef的五种状态管理. Unchanged(持久态) Midifi ...
- ubuntu18启动zabbix-agent失败/故障记录
故障现象 ubuntu 16 升级18 之后 安装了zabbix agent 今天突然agent掉了 上去的时候发现 报错: 后来打算-c 启动然后发现 /usr/sbin/zabbix_agentd ...
- 计算从1到n中,出现某位数字的次数
出现1-9中某位数字次数的算法 /** * @param input 整数n(1 ≤ n ≤ 1,000,000,000) * @return 1-9中某个数字在数列中出现的次数 */ public ...