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

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

开发者学堂课程【大数据 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),

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

相关文章
|
测试技术 持续交付
单元测试:构建稳健应用的第一步
在现代软件开发中,单元测试已经成为构建稳健应用程序的不可或缺的一环。它们是自动化测试的一种形式,旨在验证应用程序的各个部分是否按预期工作。本博客将深入探讨单元测试的核心概念、实施方法以及为什么它们对于开发可维护、可靠的软件至关重要。
201 0
|
5月前
|
Java 测试技术
单元测试问题之想通过单元测试来驱动代码的设计与重构,如何实现
单元测试问题之想通过单元测试来驱动代码的设计与重构,如何实现
|
6月前
|
测试技术 开发者
单元测试问题之为什么单测覆盖率高的项目模块更易于迭代演进
单元测试问题之为什么单测覆盖率高的项目模块更易于迭代演进
|
8月前
|
搜索推荐 JavaScript Java
项目开发过程中实际遇到的几个问题处理
项目开发过程中实际遇到的几个问题处理
222 2
|
Java 测试技术 Maven
单元测试运行原理探究
单元测试是软件开发过程中的重要一环,好的单测可以帮助我们更早的发现问题,为系统的稳定运行提供保障。单测还是很好的说明文档,我们往往看单测用例就能够了解到作者对类的设计意图。代码重构时也离不开单测,丰富的单测用例会使我们重构代码时信心满满。
单元测试运行原理探究
|
测试技术
jira学习案例127-传统单元测试1
jira学习案例127-传统单元测试1
87 0
jira学习案例127-传统单元测试1
|
测试技术
jira学习案例128-传统单元测试2
jira学习案例128-传统单元测试2
79 0
jira学习案例128-传统单元测试2
|
XML SQL JavaScript
当前在工作中使用到的高效的代码编写方法
当前在工作中使用到的高效的代码编写方法,让代码去生成重复性质的代码
139 0
|
Java 测试技术 Maven
一次单元测试优化的过程总结
本文将介绍淘宝用户运营平台团队最近在实践单元测试过程中遇到的一个问题。
446 0
一次单元测试优化的过程总结
|
自然语言处理 Java 测试技术
告别祈祷式编程|单元测试在项目里的正确落地姿势
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Jav...
183 1