Spark经典案例1-通过采集的气象数据分析每年的最高温度
来源:互联网 发布:双色球 知乎 编辑:程序博客网 时间:2024/04/30 16:54
原始数据分析
0067011990999991950051507004888888889999999N9+00001+9999999999999999999999
0067011990999991950051512004888888889999999N9+00221+9999999999999999999999
0067011990999991950051518004888888889999999N9-00111+9999999999999999999999
0067011990999991949032412004888888889999999N9+01111+9999999999999999999999
0067011990999991950032418004888888880500001N9+00001+9999999999999999999999
0067011990999991950051507004888888880500001N9+00781+9999999999999999999999
数据说明:
第15-19个字符是year
第45-50位是温度表示,+表示零上 -表示零下,且温度的值不能是9999,9999表示异常数据
第50位值只能是0、1、4、5、9几个数字
package ClassicCaseimport org.apache.spark.{SparkConf, SparkContext}/** * 业务场景:通过采集的气象数据分析每年的最高温度 * 每年的最高温度 * Created by YJ on 2017/2/7. */object case1 { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local").setAppName("reduce") val sc = new SparkContext(conf) sc.setLogLevel("ERROR") //获取数据 val one = sc.textFile("hdfs://192.168.109.130:8020//user/flume/ClassicCase/case1") //过滤数据 //0 0670119909 9999195005 1507004888 8888805000 01N9+00781 +999999999 9999999999 999 val yearAndTemp = one.filter(line => { //匹配0、1、4、5、9 ,有其他含义 val quality = line.substring(50, 51); var airTemperature = 0 //温度: +零上,-零下 if(line.charAt(45)=='+'){ //00781 airTemperature = line.substring(46, 50).toInt }else{ //-00781 airTemperature = line.substring(45, 50).toInt } //airTemperature是9999为异常数据,排除,quality必须要是01459 ,数据过滤 airTemperature != 9999 && quality.matches("[01459]")}) .map{ //数据挑选,挑选年份和温度 line =>{ val year = line.substring(15,19) var airTemperature = 0 if(line.charAt(45)=='+'){ airTemperature = line.substring(46, 50).toInt }else{ airTemperature = line.substring(45, 50).toInt } (year,airTemperature) } } //自己实现: println("--") val groupe = yearAndTemp.groupByKey() val groupedTop5 = groupe.map(rdd => { //每个Key,取最大的一个,排序 (rdd._1,rdd._2.toList.sortWith(_ > _ ).take(5)) }) groupedTop5.foreach(println) println("--") //案例实现:数据排序 val res = yearAndTemp.reduceByKey( (x,y)=> if(x>y) x else y ) res.collect.foreach(x=>println("year : " + x._1+", max : "+x._2)) //相同key的值相加,传给key的值 yearAndTemp.reduceByKey(_+_).foreach(println) yearAndTemp.reduceByKey((x,y)=> x+y).foreach(println) //相同的key的值相比较,取大的值 yearAndTemp.reduceByKey( (x,y) => if(x>y) x else y ).collect.foreach(x=>println("year : " + x._1+", max : "+x._2)) sc.stop() }}
上面为了过滤非法的数据,在map前先做了filter过滤。
spark执行的任务结果:
自己过程:
(1949,List(111)
(1950,List(78, 22, 0, 0, -11))
案例过程:
year : 1949, max : 111
year : 1950, max : 78
推理过程:
(1949,111)
(1950,89)
(1949,111)
(1950,89)
year : 1949, max : 111
year : 1950, max : 78
- Spark经典案例1-通过采集的气象数据分析每年的最高温度
- Hadoop经典案例Spark实现(一)——通过采集的气象数据分析每年的最高温度
- Hadoop经典案例Spark实现(一)——通过采集的气象数据分析每年的最高温度
- Hadoop 实例1---通过采集的气象数据分析每年的最高温度
- 简单的MapReduce例子,从一批数据中获取每年的最高温度
- 基于ARM+CPLD的气象信息数据采集方案
- 学习笔记(一)之示例程序:计算每年的最高温度MaxTemperature
- 【hadoop】Hadoop学习笔记(一)之示例程序:计算每年的最高温度MaxTemperature
- Hadoop学习笔记(一)之示例程序:计算每年的最高温度MaxTemperature
- Hadoop学习笔记(一)之示例程序:计算每年的最高温度MaxTemperature
- hadoop编程(4)-MapReduce案例:求每一年的最高温度
- hadoop 气象数据分析
- 气象数据分析代码
- Python 气象数据分析
- 《Spark商业案例与性能调优实战100课》第1课:商业案例之通过RDD实现分析大数据电影点评系统中电影的用户行为信息
- 通过采集的激光数据构建地图
- 通过一个气象分析程序来掌握二维数组以及多维数组的应用
- 气象数据类的开发笔记
- 【React全家桶入门之九】图书管理与自动完成
- windows自动挂载VHD虚拟硬盘
- git命令大全
- javaweb国际化问题
- 【连通性状态压缩DP】URAL1519
- Spark经典案例1-通过采集的气象数据分析每年的最高温度
- 模板:如何判断模板参数T为内建数据类型
- 孤儿进程与僵尸进程[总结]
- 大神总结的App重构经验
- c——内置类型提升
- android 上传图片(压缩) Bitmap 转File
- TCP socket网线断开判断
- 持久层框架之MyBatis
- 3des加密Android和iOS的加密算法有时候位数是不同的。解决办法