Spark算上下基线
def baseLine(sc: SparkContext): Unit = {
println("--------------------baseLine start--------------------")
var data1Rdd = sc.textFile("/test/baseLineTestData.txt")
var map = HashMap[String, HashMap[String, collection.mutable.ArrayBuffer[Double]]]()
val data1 = data1Rdd.collect()
data1.map { line =>
println("--------------------data1.foreach start--------------------")
val parts = line.split('|')
val ip = parts(0)
val port = parts(1)
val startTime = parts(2)
val endTime = parts(3)
val sun = parts(4).toDouble
println("ip:"+ip)
println("port:"+port)
println("startTime:"+startTime)
println("endTime:"+endTime)
println("sun:"+sun)
//ip+port,14:02 14:07 List
//ip+port,15:02 15:07 List
val key1 = ip + "_" + port
println("key1:"+key1)
val key2 = startTime.split(" ")(1) + "_" + endTime.split(" ")(1)
println("key2:"+key2)
var tmpMap = map.get(key1)
if (tmpMap != null && tmpMap.size > 0) {
println("--------------------map is not null--------------------")
val sumArray = tmpMap.get(key2)
if (sumArray != null) {
sumArray += sun
}
} else {
println("--------------------map is null--------------------")
//如果当前Key不存在的话,是一个全新的Ip
val sumArray = collection.mutable.ArrayBuffer[Double]()
val secondMap = HashMap[String, collection.mutable.ArrayBuffer[Double]]()
secondMap += (key2 -> sumArray)
map += (key1 -> secondMap)
}
}
println("--------------------get data is end--------------------")
map.map(e => {
println("--------------------Statistics start --------------------")
val resultKey1 = e._1
val resultVal1 = e._2
println("resultKey1:" + resultKey1)
resultVal1.foreach(f => {
val resultKey2 = f._1
val resultVal2 = f._2
println("resultKey2:" + resultKey2)
val dataArray = resultVal2.map(f => Vectors.dense(f))
val summary: MultivariateStatisticalSummary = Statistics.colStats(sc.parallelize(dataArray))
//
println("--------------------mean:"+summary.mean+" --------------------")
println("--------------------variance:"+summary.variance+" --------------------")
println("--------------------mean apply 0:"+summary.mean.toArray.apply(0)+" --------------------")
println("--------------------variance apply 0:"+summary.variance.apply(0)+" --------------------")
val upbase = summary.mean.toArray.apply(0) + 1.960 * Math.sqrt(summary.variance.apply(0))
val downbase = summary.mean.toArray.apply(0) - 1.960 * Math.sqrt(summary.variance.apply(0))
println("------------------- " + upbase + " ---------- " + downbase)
val df = new DecimalFormat(".##")
val upbaseString = df.format(upbase)
val downbaseString = df.format(downbase)
//resultMap.put(key, value)
val result3 = HashMap[Double, Double]()
//result3 +=(upbase -> downbase)
println("ip port:" + resultKey1 + ",time:" + resultKey2 + ",upbase:" + upbase + ",downbase:" + downbase)
})
})
println("--------------------baseLine end --------------------")
}
需求:计算某一个IP的端口在某一个时间点的流量上下基线
数据样例:
192.168.10.110|8080|2015-10-14 14:02|2015-10-14 14:07|3210981
192.168.10.110|8080|2015-10-13 14:02|2015-10-13 14:07|3210881
192.168.10.110|8080|2015-10-12 14:02|2015-10-12 14:07|3210781
192.168.10.110|8080|2015-10-11 14:02|2015-10-11 14:07|3210681
192.168.10.110|8080|2015-10-10 14:02|2015-10-10 14:07|3210581
192.168.10.110|8080|2015-10-09 14:02|2015-10-09 14:07|3210481
192.168.10.110|8080|2015-10-08 14:02|2015-10-08 14:07|3210381
192.168.10.110|8080|2015-10-07 14:02|2015-10-07 14:07|3210281
192.168.10.110|8080|2015-10-06 14:02|2015-10-06 14:07|3210181
192.168.10.110|8080|2015-10-05 14:02|2015-10-05 14:07|3210081
192.168.10.110|8080|2015-10-04 14:02|2015-10-04 14:07|3219981
192.168.10.110|8080|2015-10-03 14:02|2015-10-03 14:07|3218981
192.168.10.110|8080|2015-10-02 14:02|2015-10-02 14:07|3217981
192.168.10.110|8080|2015-10-01 14:02|2015-10-01 14:07|3216981
192.168.10.110|8080|2015-09-30 14:02|2015-09-30 14:07|3215981
192.168.10.110|8080|2015-09-29 14:02|2015-09-29 14:07|3214981
192.168.10.110|8080|2015-09-28 14:02|2015-09-28 14:07|3213981
192.168.10.110|8080|2015-09-27 14:02|2015-09-27 14:07|3212981
192.168.10.110|8080|2015-09-26 14:02|2015-09-26 14:07|3211981
192.168.10.110|8080|2015-09-25 14:02|2015-09-25 14:07|3220981
192.168.10.110|8080|2015-09-24 14:02|2015-09-24 14:07|3230981
192.168.10.110|8080|2015-09-23 14:02|2015-09-23 14:07|3240981
192.168.10.110|8080|2015-09-22 14:02|2015-09-22 14:07|3250981
192.168.10.110|8080|2015-09-21 14:02|2015-09-21 14:07|3260981
192.168.10.110|8080|2015-09-20 14:02|2015-09-20 14:07|3270981
192.168.10.110|8080|2015-09-19 14:02|2015-09-19 14:07|3280981
192.168.10.110|8080|2015-09-18 14:02|2015-09-18 14:07|3290981
192.168.10.110|8080|2015-09-17 14:02|2015-09-17 14:07|3210982
192.168.10.110|8080|2015-09-16 14:02|2015-09-16 14:07|3210983
192.168.10.110|8080|2015-09-15 14:02|2015-09-15 14:07|3210984
192.168.10.110|8080|2015-09-14 14:02|2015-09-14 14:07|3210985
192.168.10.110|8080|2015-09-13 14:02|2015-09-13 14:07|3210986
192.168.10.110|8080|2015-09-12 14:02|2015-09-12 14:07|3210987
192.168.10.110|8080|2015-09-11 14:02|2015-09-11 14:07|3210988
192.168.10.110|8080|2015-09-10 14:02|2015-09-10 14:07|3110989
192.168.10.110|8080|2015-09-09 14:02|2015-09-09 14:07|3210981
192.168.10.110|8080|2015-09-07 14:02|2015-09-07 14:07|3310981
192.168.10.110|8080|2015-09-06 14:02|2015-09-06 14:07|3410981
192.168.10.110|8080|2015-09-05 14:02|2015-09-05 14:07|2510981
192.168.10.110|8081|2015-10-14 14:02|2015-10-14 14:07|2210981
192.168.10.110|8081|2015-10-13 14:02|2015-10-13 14:07|2210881
192.168.10.110|8081|2015-10-12 14:02|2015-10-12 14:07|2210781
192.168.10.110|8081|2015-10-11 14:02|2015-10-11 14:07|2210681
192.168.10.110|8081|2015-10-10 14:02|2015-10-10 14:07|2210581
192.168.10.110|8081|2015-10-09 14:02|2015-10-09 14:07|2210481
192.168.10.110|8081|2015-10-08 14:02|2015-10-08 14:07|2210381
192.168.10.110|8081|2015-10-07 14:02|2015-10-07 14:07|2210281
192.168.10.110|8081|2015-10-06 14:02|2015-10-06 14:07|2210181
192.168.10.110|8081|2015-10-05 14:02|2015-10-05 14:07|2210081
192.168.10.110|8081|2015-10-04 14:02|2015-10-04 14:07|2219981
192.168.10.110|8081|2015-10-03 14:02|2015-10-03 14:07|2218981
192.168.10.110|8081|2015-10-02 14:02|2015-10-02 14:07|2217981
192.168.10.110|8081|2015-10-01 14:02|2015-10-01 14:07|2216981
192.168.10.110|8081|2015-09-30 14:02|2015-09-30 14:07|2215981
192.168.10.110|8081|2015-09-29 14:02|2015-09-29 14:07|2214981
192.168.10.110|8081|2015-09-28 14:02|2015-09-28 14:07|2213981
192.168.10.110|8081|2015-09-27 14:02|2015-09-27 14:07|2212981
192.168.10.110|8081|2015-09-26 14:02|2015-09-26 14:07|2211981
192.168.10.110|8081|2015-09-25 14:02|2015-09-25 14:07|2220981
192.168.10.110|8081|2015-09-24 14:02|2015-09-24 14:07|2230981
192.168.10.110|8081|2015-09-23 14:02|2015-09-23 14:07|2240981
192.168.10.110|8081|2015-09-22 14:02|2015-09-22 14:07|2250981
192.168.10.110|8081|2015-09-21 14:02|2015-09-21 14:07|2260981
192.168.10.110|8081|2015-09-20 14:02|2015-09-20 14:07|2270981
192.168.10.110|8081|2015-09-19 14:02|2015-09-19 14:07|2280981
192.168.10.110|8081|2015-09-18 14:02|2015-09-18 14:07|2290981
192.168.10.110|8081|2015-09-17 14:02|2015-09-17 14:07|2210982
192.168.10.110|8081|2015-09-16 14:02|2015-09-16 14:07|2210983
192.168.10.110|8081|2015-09-15 14:02|2015-09-15 14:07|2210984
192.168.10.110|8081|2015-09-14 14:02|2015-09-14 14:07|2210985
192.168.10.110|8081|2015-09-13 14:02|2015-09-13 14:07|2210986
192.168.10.110|8081|2015-09-12 14:02|2015-09-12 14:07|2210987
192.168.10.110|8081|2015-09-11 14:02|2015-09-11 14:07|2210988
192.168.10.110|8081|2015-09-10 14:02|2015-09-10 14:07|2110989
192.168.10.110|8081|2015-09-09 14:02|2015-09-09 14:07|2210981
192.168.10.110|8081|2015-09-07 14:02|2015-09-07 14:07|2310981
192.168.10.110|8081|2015-09-06 14:02|2015-09-06 14:07|2410981
192.168.10.110|8081|2015-09-05 14:02|2015-09-05 14:07|2510981
Spark算上下基线的更多相关文章
- 【转】GPS基线解算模式
GPS基线向量是利用2台或2台以上GPS接 收机所采集的同步观测数据形成的差分观测值,通过参数估计得方法所计算出的两两接收机间的三维坐标差.与常规地面测量中所测定的基线边长不同,基线向量是 既具有长度 ...
- span设为inline-block之后,未包含文字时下面会多出一条空白问题
1.问题的引出: 产品列表页面场景: 上面是产品图片[img], 中间是提示库存信息[span](始终存在,有库存则不显示文字,但元素占位.所以设置display:inline-block), 下面是 ...
- GPS常识-B版(简)
第一章 绪论 1.简述GPS系统的特点有哪些? 在测绘工程中有如下优点:(1)定位精度高(2)观测时间短(3)测站间无需通视(4)可提供地心坐标(5)操作简便(6)全天候作业(7)功能多.应用广 GP ...
- GPS常识-A版(详)
第一章 绪论 1.简述GPS系统的特点有哪些? GPS在测绘工程中应用的优点 P13 ●定位精度高 应用实践证明,相对静态定位1小时以上观测解,其平面位置:在300-1500m范围内,绝对误差小于1m ...
- GPS学习笔记
预备知识 1. 卫星发送信号时,是以特定频率的电磁波为载波,调整信号到载波上的.多普勒效应就是,卫星和接收机是相对运动的,那么载波的频率会随运动距离发生改变.(<GPS测量与数据处理>p3 ...
- 一个完整的机器学习项目在Python中演练(三)
大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习.但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中.就像你的脑海中已经有了一块块"拼 ...
- 用Spark学习FP Tree算法和PrefixSpan算法
在FP Tree算法原理总结和PrefixSpan算法原理总结中,我们对FP Tree和PrefixSpan这两种关联算法的原理做了总结,这里就从实践的角度介绍如何使用这两个算法.由于scikit-l ...
- 存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?
引言 随着大数据技术架构的演进,存储与计算分离的架构能更好的满足用户对降低数据存储成本,按需调度计算资源的诉求,正在成为越来越多人的选择.相较 HDFS,数据存储在对象存储上可以节约存储成本,但与此 ...
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
随机推荐
- Entity Framework search sequnce
sql express, then (LocalDb)\v11.0 (LocalDb)\mssqllocaldb sqllocaldb i could list all the local db i ...
- 如何用github快速搭建个人博客
当当当当-来看下新鲜出炉的Github博客 http://wli12.github.io/ 喜欢写markdown,但cnblogs对md文件的渲染简直丑爆了... 好奇怎么用github+Jekyl ...
- robotframework接口测试初探2
python这个requests模块常被用来测试接口.使用RequestLibrary库测试之前,先来看下这个模块是怎样使用的 最简单的调用是 r=requests.get("http:// ...
- C++类大小
对于C++中类的大小,主要针对于无成员的空类大小,编译器会对该类进行优化,情况主要分为是否有虚表(虚函数)两种类型,对于无虚函数的类,该类大小均为1个字节(编译器插入一个char表示该类的存在),而出 ...
- linux压缩解压文件
首先进入文件夹 cd /home/ftp2/1520/web 压缩方法一:压缩web下的888.com网站 zip -r 888.com.zip888.com 压缩方法二:将当前目录下的所有文件和文件 ...
- SQL --Chapter02 查询基础
SELECT 语句基础 SELECT <列名>,….. FROM <表名>; 查询全部列: SELECT * FROM <表名>; 使用AS关键字为列设置别名,设定 ...
- C#编程语言与面向对象——类与对象
由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 ...
- angularjs 文件上传 如何绑定file表单的change?
ng-change 会失灵 , 唯一的解决方式 是 onchange="angular.element(this).scope().fileNameChanged()"然后利用 n ...
- 移动web开发和移动app开发的区分
1.移动web开发 这部分跟web前端开发差别不大,使用的技术都是html+css+js.区别为手机浏览器是webkit的天下,pc端是IE的天 下.手机网页可以理解成pc网页的缩小版加一些触摸特性. ...
- [ JS 进阶 ] 基本类型 引用类型 简单赋值 对象引用
ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型,拥有方法的类型和不能拥有方法的类型,还可以分为可变类型和不可变类型,其实这些叫法都是依据这两 ...