一、项目简介

这是一个车辆监控项目。主要实现了三个功能:

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车辆监控项目的更多相关文章

  1. 入门大数据---Spark整体复习

    一. Spark简介 1.1 前言 Apache Spark是一个基于内存的计算框架,它是Scala语言开发的,而且提供了一站式解决方案,提供了包括内存计算(Spark Core),流式计算(Spar ...

  2. 入门大数据---Spark简介

    一.简介 Spark 于 2009 年诞生于加州大学伯克利分校 AMPLab,2013 年被捐赠给 Apache 软件基金会,2014 年 2 月成为 Apache 的顶级项目.相对于 MapRedu ...

  3. 入门大数据---Spark开发环境搭建

    一.安装Spark 1.1 下载并解压 官方下载地址:http://spark.apache.org/downloads.html ,选择 Spark 版本和对应的 Hadoop 版本后再下载: 解压 ...

  4. 入门大数据---Spark累加器与广播变量

    一.简介 在 Spark 中,提供了两种类型的共享变量:累加器 (accumulator) 与广播变量 (broadcast variable): 累加器:用来对信息进行聚合,主要用于累计计数等场景: ...

  5. 入门大数据---Spark部署模式与作业提交

    一.作业提交 1.1 spark-submit Spark 所有模式均使用 spark-submit 命令提交作业,其格式如下: ./bin/spark-submit \ --class <ma ...

  6. 王家林 大数据Spark超经典视频链接全集[转]

    压缩过的大数据Spark蘑菇云行动前置课程视频百度云分享链接 链接:http://pan.baidu.com/s/1cFqjQu SCALA专辑 Scala深入浅出经典视频 链接:http://pan ...

  7. 《大数据Spark企业级实战 》

    基本信息 作者: Spark亚太研究院   王家林 丛书名:决胜大数据时代Spark全系列书籍 出版社:电子工业出版社 ISBN:9787121247446 上架时间:2015-1-6 出版日期:20 ...

  8. 大数据Spark超经典视频链接全集

    论坛贴吧等信息发布参考模板 Scala.Spark史上最全面.最详细.最彻底的一整套视频全集(特别是机器学习.Spark Core解密.Spark性能优化.Spark面试宝典.Spark项目案例等). ...

  9. 以慕课网日志分析为例-进入大数据Spark SQL的世界

    下载地址.请联系群主 第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目 ...

随机推荐

  1. Rocket - tilelink - TLArbiter

    https://mp.weixin.qq.com/s/0ob-Fq-ZOoj-_S7pTJu6rQ   介绍TLArbiter的实现,主要关注如何实现burst的多个beat的输出.   ​​   1 ...

  2. Chisel3 - Tutorial - VendingMachineSwitch

    https://mp.weixin.qq.com/s/5lcMkenM2zTy-pYOXfRjyA   演示如何使用switch/is来实现状态机.   参考链接: https://github.co ...

  3. 【Springboot HBase】遇到的一些问题

    想要运行的代码需要在application中运行 使用@Component并实现CommandLineRunner接口.重写方法@Override run( ) @Component public c ...

  4. 【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建

    0. 前言 在上一节中,我们创建了一个项目架构,后续的项目都会在那个架构上做补充. 1. Nacos 1.1 简介 Nacos可以用来发现.配置和管理微服务.提供了一组简单易用的特性集,可以快速实现动 ...

  5. Java实现 LeetCode 658 找到 K 个最接近的元素(暴力)

    658. 找到 K 个最接近的元素 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先 ...

  6. Java实现 LeetCode 509 斐波那契数

    509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 ...

  7. Java实现 蓝桥杯VIP 算法提高 铺地毯

    算法提高 铺地毯 时间限制:1.0s 内存限制:256.0MB 问题描述 为了准备一个学生节,组织者在会场的一片矩形区域(可看做是平面直角坐标 系的第一象限)铺上一些矩形地毯.一共有n 张地毯,编号从 ...

  8. MyBatis运行流程及入门第一个程序

    1. mybatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  9. CentOS7——配置阿里云镜像源

    CentOS7--配置阿里云镜像源 #下载CentOS 7的repo文件 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun ...

  10. thinkphp5.0使用官方验证码插件

    1.首先使用Composer下载验证码插件. 安装完成后,使用以下命令修改composer配置文件,使用国内镜像.原因你懂的. composer config -g repo.packagist co ...