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 ...
随机推荐
- sql server 中xml 数据类型的insert、update、delete
近日对SQL操作XML作了如下整理: 1.插入 XML DECLARE @myDoc XMLSET @myDoc = '<Root> <ProductDescription Prod ...
- 快速上手RaphaelJS--Instant RaphaelJS Starter翻译(三)
(目前发现一些文章被盗用的情况,我们将在每篇文章前面添加原文地址,本文源地址:http://www.cnblogs.com/idealer3d/p/Instant_RaphaelJS_Starter3 ...
- 折腾Ubuntu下的android studio
ps:网速很慢,耗时一天多.先吐槽一下搭建很麻烦,毕竟现在在ubuntu上用as的人还不太多,很多步骤最好先自备梯子. 测试环境: ubuntu 14.04 LTS 64bit 安装的东西无非就是an ...
- maven不打包子模块资源文件
在maven多模块项目中,对子模块中的测试文件不需要打包到目标项目中,以免产生影响.实现方法: 1. 将测试资源放在java/test/resources 目录下,mvn package默认不会将te ...
- Android之QQ新用户注册界面1
还没到睡觉时间所以再加了一个界面... 问题: 1.下拉列表(因为还没看到这里...) 2.标题栏显示问题 3.按钮的 Enable 设置 .......... 以下是代码: 布局 fragment_ ...
- DMA控制器
DMA控制器依赖于平台硬件,这里只对i386的8237 DMA控制器做简单的说明,它有两个控制器,8个通道,具体说明如下: 控制器1: 通道0-3,字节操作, 端口为 00-1F 控制器2: 通道 4 ...
- SVN-Server搭建及配置
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion ...
- 补交作业——Beta发布评论
1.飞天小女警: 礼物挑选这一项目是很好的点子,比较能够吸引客户,更加方便快捷的挑选也满足现代人在送礼物方面的需求.这一次的发布界面效果好了很多,并且成功的发布到了云服务器上. 2.nice! : 这 ...
- c++句柄设计
句柄,也称为智能指针. 我计算了一下我的时间,以后每14天得读完一本书,才不愧对我买的这么多书.然而我还要抽出时间来谢谢博文.最近读的是c++沉思录,开篇就用了3章来讲述句柄.好了,废话少说,接下来谈 ...
- Python内存数据库/引擎
1 初探 在平时的开发工作中,我们可能会有这样的需求:我们希望有一个内存数据库或者数据引擎,用比较Pythonic的方式进行数据库的操作(比如说插入和查询). 举个具体的例子,分别向数据库db中插入两 ...