用spark对时间数据进行分组求平均值

实现过程数据格式为key,timestrap,value。需求是按照key并对timestrap固定时间间隔计算,再将key和时间间隔作为key进行分组统计value的均值。其中利用了spark的gourpbykey操作,并对时间进行了转换。实现过程如下: package org.app.spark /** * Created by root on 17-7-2. */ import org.apache.spark.rdd.RDD import org.apache.spark.{HashPartitioner, SparkConf, SparkContext} import java.text.SimpleDateFormat import java.util.{Calendar, Date} import scala.collection.mutable.ArrayBuffer class ParseTimeSeries(path: String) { val conf = new SparkConf().setAppName("ParseSeries").setMaster("local[2]") val sc = new SparkContext(conf) def getData: RDD[(String, Date, Int)] = { val line: RDD[Array[String]] = sc.textFile(path).map(s => s.split(",")) val newLine = line.map(line => { val timeString = line.apply(1) val tf: SimpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm") val timeFormat: Date = tf.parse(timeString) (line.apply(0), timeFormat, line.apply(2).toInt) }) newLine } def processSeriesByKey(rdd: RDD[(String, Date, Int)]): RDD[(String, Int, Int)] = { val toCalendar = Calendar.getInstance() val array = new ArrayBuffer[(String, Int, Int)]() for (x <- rdd.collect()) { toCalendar.setTime(x._2) val day = toCalendar.get(Calendar.HOUR_OF_DAY) val flag = day / 10 array.+=((x._1, flag, x._3)) } sc.parallelize(array) } } object testParseTimeSeries { def main(args: Array[String]): Unit = { val file: String = "/opt/Project/spark_project/data/TimeValue.csv" val parse = new ParseTimeSeries(file) val new_rdd = parse.processSeriesByKey(parse.getData) new_rdd.collect().foreach(println) val other = new_rdd.keyBy(x => (x._1, x._2)).map(x => (x._1, x._2._3)).groupByKey(). map(x => (x._1, x._2.sum/x._2.count(x=>true).toDouble)) other.foreach(println) other.aggregate() } } ...
 2017-07-03   spark    spark  大数据 

Bootstrap,Boosting,Bagging,Randforest几种方法介绍

bagging, boosting, random forest和boosting算法介绍这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, jackknife, bagging, boosting, random forest都有介绍,以下是搜索得到的原文,没找到博客作者的地址,在这里致谢作者的研究。 一并列出一些找到的介绍boosting算法的资源: 视频讲义,介绍boosting算法,主要介绍AdaBoosing 在这个网站的资源项里列出了对于boosting算法来源介绍的几篇文章,可以下载 一个博客介绍了许多视觉中常用算法,作者的实验和理解,这里附录的链接是关于使用opencv进行人脸检测的过程和代码,可以帮助理解训练过程是如何完成的 这里是一个台湾的电子期刊上关于AdaBoost的介绍 —- Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting这些术语,我经常搞混淆,现在把它们放在一起,以示区别。(部分文字来自网络,由于是之前记的笔记,忘记来源了,特此向作者抱歉) Bootstraping: 名字来自成语pull up by your own bootstraps,意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。其核心思想和基本步骤如下: 采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。 根据抽出的样本计算给定的统计量T。 重复上述N次(一般大于1000),得到N个统计量T。 计算上述N个统计量T的样本方差,得到统计量的方差。 应该说Bootstrap是现代统计学较为流行的一种统计方法,在小样本时效果很好。通过方差的估计可以构造置信区间等,其运用范围得到进一步延伸。Jackknife: 和上面要介绍的Bootstrap功能类似,只是有一点细节不一样,即每次从样本中抽样时候只是去除几个样本(而不是抽样),就像小刀一样割去一部分。...
 2017-06-12   机器学习    boosting  bagging  randomforest