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 ...
随机推荐
- Impossible to load an image in xcassets on bundle
Impossible to load an image in xcassets on bundle up vote5down votefavorite 3 I need to include imag ...
- Python 基礎 - 文件的操作
在來我們來玩一下文件操作,這個在未來工作上,也是會很常用到的功能 Python2.7中,可以用file()來打開文件,而在Python3中,一律都是用open(),接下來在當前目錄下,先建立一個空文件 ...
- HTML5地理定位
1.通过navigator.geolocation来获取设备当前位置,返回一个位置对象,可以获得当前经纬度相关信息: 2.navgatior.geolocation的三个方法: getCurrentP ...
- bash 取文件特定行
比如,想要取某文件10-20行 可以用sed sed -n '10,20p' XXX.txt 非常方便!
- vector使用篇之erase
由于最近项目使用中发现了之前对vector的一个误区,由此发现自己对vect非常不了解,对此进行了一些了解,由此打算写一下关于vector使用方面的注意点,本篇先来讲一下vector的erase功能, ...
- 关于history.js的使用
项目地址: https://github.com/browserstate/history.js 做wap端的时候,有些时候一个页面里有很多小页面或者标签,希望刷新浏览器或者按返回键的时候,能够被当成 ...
- 全面解析sizeof(上) 分类: C/C++ StudyNotes 2015-06-15 10:18 188人阅读 评论(0) 收藏
以下代码使用平台是Windows7 64bits+VS2012. sizeof是C/C++中的一个操作符(operator),其作用就是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对齐有个全 ...
- Android开发中的输入合法性检验
Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...
- php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别
关于这个问题,搜索引擎上搜到一大片的文章,有很多问题,在这找到一篇正确的说法:http://mimiz.cn/index.php/php/php-http_host-server_name-diffe ...
- Linux环境下段错误的产生原因及调试方法小结(转)
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...