阶段练习_代码编写 | 学习笔记

简介: 快速学习 阶段练习_代码编写

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段阶段练习_代码编写】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/11988


阶段练习_代码编写


内容介绍

一、学前须知

二、代码编写


一、学前须知

接下来进行代码编写,在代码编写步骤:首先,第一步,拷贝数据集到工程,然后创建类。创建类以后,代码就有容器,就可以编写代码,编写代码以后去运行测试。这是整个的四个步骤。

 

二、代码编写

第一步,如何拷贝数据集。

数据集位置如下图所示:spsrk file 目录,点开 Dateset。并复制选中的 csv 文件。

image.png

默认情况下 CSV 文件当中有一个 header,第一行是头,这个头应该去掉。如果要使用代码来去掉稍微有一点繁琐。容易思路上开小差,所以要把第一个 header 去掉,然后生成一个新的数据。使用这个 header 的数据就可以了。

csv 文件复制到工程当中。放入 dateset 目录。

image.png

创建StagePractice类,Stage阶段的类。

image.png

编写代码如下:

package cn.itcast.spark.rdd

import org.apache.spark.{SparkConf,SparkContext}

import org.junit.Test

class StagePractice{

@Test  //导入 notation

def pmProcess(():Unit={//创建方法 pmProcess

// 1.创建 sc 对象

val conf =new SparkConf().setMaster("local[6]").setAppName("stage practice"

//new 一个 SparkConf(),传递2个参数:设置Master,本地位置为6,另外设置 AppName ,名称为:stage practice

val sc=newSparkContext(conf)  //创建 Spark 对象,把 conf 放到 SparkContext 中。

// 2.读取文件

val source =sc.textFile( path="dataset/BeijingPM20100101_20151231_noheader.csv")   // textfile 的形式读取文件。

CSV 文件和普通的文件最大的区别是,它也是分行的,这一点和普通文件一样。最大的区别是 CSV 文件以逗号作为分隔符,每一行当中都有固定数目的列数,列之间使用逗号分隔。文件在 dataset 下,复制地址。同时注意命名规范。

image.png

//3.通过算子处理数据

NA 表示没有值,需要过滤清洗。然后按照年月进行 Reduce by key,再去 sort 排序一下总和,出来结果。

步骤为:

image.png

// 1.抽取数据,年,月,PM,返回结果:((年,月)PM)

// 2.清洗 ,过滤掉空的字符串,过滤掉NA

// 3.聚合 ,

// 4.排序

source.map( item => ((item.split( regex = ",")(1), //调用 map 方法 ,并且接收字符串。

item.split( regex = ",")(2)),  //使用逗号 split 出来。

item.split( regex = ",")(6))   //把年,月同时当做 key ,下标为一的项是年,下标为2的项是月,在 value 部分选下标为6的项为 PM 。元组统一当做 key 处理。.filter(item=>StringUtils.isNotEmpty(item._2)&&!item._2.equalsIgnoreCase(anotherString="NA"))

//先进行判空,判断 isNotEmpty,空就收录结果,item._2前边的数据整个作为 item 的第二项数据传输 。

IgnoreCase 忽略两个大小写的判断两个字符串大小相等。相等就收录的逻辑不正确,故前面加 !。

.map(item =>(item._1,item._2.toInt))

//第二项 NA 是字符串类型,故需要转换,则第一项没变,第二项转为 int .

.reduceByKey((curr,agg)=> curr+agg)

//因为是 ByKey 。故先按照 key 来进行分组,然后把每一组里面的  value  聚合起来。直接 curr+agg  聚合起来。

.sortBy(item=> item._2)

//将元组的第二项返回,就会按照第二项 pm 进行排序

// 4.获取结果

resultRDD.take(num=10).foreach(item=> println(item))

//foreach 打印所有的数据,因为太对,故只取10项。拿到里面每一项数据后 ,println 进行打印。

// 5.运行测试

sc.stop()

//在运行结束后关掉 sc

}

运行结果如下:

image.png

第一项是 pm 值最高的2015年,36451,第二项是37612,注意到 topten 有一点点反,故在.sortBy(item=> item._2) 改为

.sortBy( item => item. 2, ascending = false),

再次运行后结果没有问题。

相关文章
|
2月前
|
人工智能 数据可视化 安全
瀑布模型是什么?在软件开发中有哪些主要阶段和步骤?
瀑布模型是一种经典的软件开发方法,将开发过程划分为需求分析、设计、编码、测试和维护等顺序阶段,强调阶段性和文档化。适用于需求明确、稳定且对安全性和可靠性要求高的项目。尽管存在局限性,但在特定场景下仍具重要价值。未来,瀑布模型可能与其他开发模型结合,更加灵活高效。
瀑布模型是什么?在软件开发中有哪些主要阶段和步骤?
|
7月前
|
搜索推荐 JavaScript Java
项目开发过程中实际遇到的几个问题处理
项目开发过程中实际遇到的几个问题处理
169 2
|
7月前
|
编译器 C++
C++ 一种在编译阶段就能解决代码的技术
C++ 一种在编译阶段就能解决代码的技术
|
7月前
|
敏捷开发 测试技术 持续交付
面试题1: 测试常见工作流程
面试题1: 测试常见工作流程
114 0
|
7月前
|
测试技术
软件测试/测试开发|pytest用例执行顺序,这篇文章就够了
软件测试/测试开发|pytest用例执行顺序,这篇文章就够了
|
Java 测试技术 Maven
单元测试运行原理探究
单元测试是软件开发过程中的重要一环,好的单测可以帮助我们更早的发现问题,为系统的稳定运行提供保障。单测还是很好的说明文档,我们往往看单测用例就能够了解到作者对类的设计意图。代码重构时也离不开单测,丰富的单测用例会使我们重构代码时信心满满。
单元测试运行原理探究
|
网络协议 测试技术 Go
单元测试细节说明 | 学习笔记
快速学习单元测试细节说明
|
网络协议 测试技术 Go
单元测试的引出 | 学习笔记
快速学习单元测试的引出
|
测试技术
软件测试面试题:自动化测试脚本开发的主要步骤?
软件测试面试题:自动化测试脚本开发的主要步骤?
131 0
|
数据库
高质量代码优化!谈谈重构项目中if-else代码的几点建议
本篇文章探讨了代码的重构以及优化,主要针对代码中大量的条件判断if-else语句问题提出了具体的优化建议。介绍了优化if-else语句的几种有效的方法,包括switch,接口interface以及数据库实现对条件语句进行的优化。
174 0
高质量代码优化!谈谈重构项目中if-else代码的几点建议