文档章节

从零开始,手把手教会你5分钟用SPARK对PM2.5数据进行分析(包括环境准备和SPARK代码)

l
 lindylin
发布于 2015/05/09 12:55
字数 1262
阅读 1186
收藏 11

要从零开始,五分钟做完一个基于SPARK的PM2.5分析项目,你是不是会问

1. PM2.5的数据在哪里?

2. SPARK的环境哪儿有?

3. 程序怎么编?

不用急,跟着我做,5分钟就可以从零开始完成所有的事情。

准备SPARK环境

今天,在各种公有云都可能申请到SPARK的环境。但彻底免费,启动最容易的是在超能云(SuperVessel)上面的SPARK服务,完全免费。

  1. 首先登录超能云主页 http://www.ptopenlab.com . 如果你之前没有申请过帐号,可以直接申请。新申请的帐号,会收到来自 manager@ptopenlab.com 的邮件,点击里面的链接来激活帐号。

  2. 登录之后,选择主页上面的"大数据实验室(Big data service)"。

  3. 登录大数据服务,在登录见面上再次输入你注册的用户名和密码。就可以进入大数据服务页面。

  4. 点击创建,即可进入创建大数据集群的界面。目前,超能云上提供了MapReduce和SPARK两种环境。我们选择SPARK,选择最小的单节点即可,如下图所示。

  5. 点击“确认创建”后,大概过30秒钟,单节点的SPARK环境就构建成功。可以看到如下界面。

  6. 点击“Master控制台”按钮,就会出现一个登陆到编辑控制台的新页面,如下。默认密码是“passw0rd”.

  7. 就可以进入SPARK集群master节点的命令行界面。到这一步,就完成SPARK环境的准备了。

PM2.5数据

为了方便同学们进行SPARK的学习,我们特地把过去5个月的PM2.5数据放到了超能云上面,供大家作为实验数据:)这些数据是从我们5个PM2.5监测传感器每天测量所得的第一手真实数据。它们测量的是北京上地中关村软件园地区的真实情况哦。

不要小看这五个PM2.5空气质量传感器,它们是IBM研究院的最新研究成果。先看看图吧,个子小,完全符合工业户外设计要求,自带3G数据回传,而且是太阳能供电。一句话,户外室内安装,一根线都不用拉。就这么酷!

先上个图,有图有真相。

这是一个是基于激光散射技术(米氏散射理论)的低成本传感器。相比于现行市场上的传感器技术,精度高多了,能从PM0.3一直测到PM10,关键是免维护。

言归正传,我们这次把数据都整理好,方便超能云的用户进行尝试数据分析。获取数据的方法如下:

cd /home/opuser
wget http://softrepoNaNopenlab.com/bigdata/pm25_file.tar

使用tar命令解开tar包

tar -xf pm25_file.tar

在生成的目录pm25_file中有三个文件。其中,pm25.txt是数据文件,例如08-Nov-2014, 84是指2014年11月8日某一时刻的测量值为84. 

SPARK的实现代码

1.以脚本运行

pm25_2.10-1.0.jar是已经编译好的实现程序。run.sh是运行脚本。如果想先感觉一下的同学,可以直接运行./run.sh。就可以得到如下结果:

gradeOne is 24.77876%
gradeTwo is 25.663715%
gradeThree is 20.353981%
gradeFour is 12.38938%
gradeFive is 15.004249%
gradeSix is 1.7699115%

这个结果表示,在这5个月的数据中,达到国家规定的一级到六级空气质量的天数的百分比。其中,gradeSix是PM2.5测量值在250以上,gradeFive是150~250,如此类推。

2.计算PM2.5浓度均值的步骤及代码

感受过了结果,我们就来尝试一步一步编写自己的SPARK代码。先进入SPARK的编辑环境:

$ /opt/spark-1.0.2-bin-hadoop2/bin/spark-shell
scala>

读取输入数据

scala> val datainput = sc.textFile("pm25.txt")

读取所有pm25的数据到一个list中。因为我们的数据是”日期,pm2.5值“,所以中间使用","作为分隔符,以整形读取第二个值。

scala> val Valuelist = datainput.map(_.split(",")).map(x=>(x(1).trim().toInt))

计算5个月所有数据获得的PM2.5均值

scala> val AveragePm25=Valuelist.reduce(_+_)/Valuelist.count

打印输出结果

scala> println("AveragePm25 is "+AveragePm25+"ug/m3")

3.PM2.5浓度按天排序

首先,把每天(x(0)作为key)的PM2.5数值(x(1))求和(.reduceByKey(_+_))

scala> val datamap=datainput.map(_.split(",")).map(x=>(x(0),x(1).trim().toInt)).reduceByKey(_+_)

获取每天的记录个数

scala> val recordnumber=datainput.map(_.split(",")). map(x=>(x(0),1)).reduceByKey(_+_)

计算每一天的PM2.5平均值

scala> val dayAverage = datamap.join(recordnumber).map(x=>(x._1,x._2._1/x._2._2))

把所有天的当天平均值排序

scala> val sortData = dayAverage.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))

打印排序后,最高的10天的数值

scala> sortData.take(10).foreach(p=>println(p))


© 著作权归作者所有

l
粉丝 23
博文 18
码字总数 16651
作品 0
海淀
私信 提问
加载中

评论(1)

中风拓
楼主,你好,数据的路径现在已经改了 http://softrepo.ptopenlab.com/bigdata/pm25_file.tar
亲测可用,感谢楼主的代码
基于Spark SQL实现对HDFS操作的实时监控报警

1.前言 E-MapReduce计划从EMR-3.18.1版本开始提供Spark Streaming SQL的预览版功能。Spark Streaming SQL是在Spark Structured Streaming的基础上做了进一步封装,方便用户使用SQL语言进行S...

鱼跟猫
04/12
0
0
Cloudera Developer之Spark 及 Hadoop 开发员培训(CCA-175)

学习如何将数据导入到 Apache Hadoop 机群并使用 Spark、Hive、Flume、Sqoop、Impala 及其他 Hadoop 生态系统工具对数据进行各种操作和处理分析。 培训详情地址:https://www.huodongjia.co...

活动家
2017/07/28
239
0
基于Spark自动扩展scikit-learn (spark-sklearn)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/sunbow0/article/details/50848719 1、基于Spark自动扩展scikit-lear...

sunbow0
2016/03/10
0
0
从Hadoop到Spark的架构实践

当下,Spark已经在国内得到了广泛的认可和支持:2014年,Spark Summit China在北京召开,场面火爆;同年,Spark Meetup在北京、上海、深圳和杭州四个城市举办,其中仅北京就成功举办了5次,内...

Emilypz
2015/10/10
1K
0
什么是 Apache Spark?大数据分析平台如是说

自从 Apache Spark 2009 年在 U.C. Berkeley 的 AMPLab 默默诞生以来,它已经成为这个世界上最重要的分布式大数据框架之一。Spark 可以用多种方式部署,它为 Java、Scala、Python,和 R 编程...

oschina
2017/11/22
712
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 干啥啥不行,吃饭第一名。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 李白到杜甫家吃饭。杜甫洗菜,发现只有青瓜和萝卜,心中愧疚。这时,他看见了邻居家的鸡,杜甫一时心酸,忍不住喃喃自语:我希望...

小小编辑
27分钟前
164
7
Java描述设计模式(08):桥接模式

本文源码:GitHub·点这里 || GitEE·点这里 一、桥接模式简介 1、基础描述 桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化...

知了一笑
27分钟前
5
0
C++ 函数指针的用法

天王盖地虎626
41分钟前
2
0
白话比原链跨链技术

随着Bystack的主侧链架构的推出,主侧链之间的跨链问题也成为比原链团队的主要攻克工程难题,当前比原链已经推出了两种跨链的机制,各有不同的侧重点,可能因为本身的跨链技术比较晦涩,本篇...

比原链Bytom
50分钟前
2
0
PostgreSQL参数search_path影响及作用

search_path稍微熟悉PG就会用到,用法这里就不必讲,本篇主要讲它在程序里怎样处理。 1、GUC参数定义 这是个 config_string 参数 {{"search_path", PGC_USERSET, CLIENT_CONN_STATEMENT,...

有理想的猪
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部