Spark大数据分析与实战(第二版) 项目2 教案_第1页
Spark大数据分析与实战(第二版) 项目2 教案_第2页
Spark大数据分析与实战(第二版) 项目2 教案_第3页
Spark大数据分析与实战(第二版) 项目2 教案_第4页
Spark大数据分析与实战(第二版) 项目2 教案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程名称Spark大数据分析选用教材Spark大数据分析与实战(第2版)出版社西安电子科技大学出版社章节项目2编写Scala程序处理新能源汽车销售数据教学内容在学习Scala语法基础上,编写Scala代码完成新能源汽车销售数据的处理。授课学时4授课班级****专业*****班授课日期授课地点教学目标了解Ubuntu环境下的Scala安装;熟悉Scala的基础语法,能够编写简单的程序;熟悉分支、循环结构,掌握if、for、while的用法;掌握数组、列表、映射、集合等容器的常见用法;掌握函数的定义方法,能够书写简单的匿名函数;了解面向对象的基本概念,能够自定义类;熟悉模式匹配,掌握样例类的定义方法。重点难点Scala中的分支与循环结构;组合数据类型Array、List、Tuple、Set、Map的基本用法;匿名函数及高阶函数的用法;模式匹配的使用。教学方法R讲授£讨论或座谈£问题导向学习£分组合作学习£案例教学£任务驱动R项目教学£情景教学£演示汇报£实践教学£参观访问£引导文教学£其他(--)教学准备(教师)教材:《Spark大数据分析与实战(第2版)》硬件设备:内存8G(或以上)的计算机(2)教学资源:课件PPT、教学日历、相关软件等教学准备(学生)教材:《Spark大数据分析与实战(第2版)》硬件设备:内存8G(或以上)的计算机(3)教学资源:课件PPT、相关软件等教学环节教学内容与过程(教学内容、教学方法、组织形式、教学手段)课前组织教师通过课程教学平台或班级群发布学习预习任务及课程资源;学生提前预习相关内容,并完成课前自测等。课程内容描述任务2.1Scala的安装与体验Spark本身就是用Scala编写,因此Spark对Scala的支持最为高效,是生产环境下Spark大数据开发的主要语言。Scala是ScalableLanguage的简写,它是一门多范式的编程语言;Scala于2001年由瑞士洛桑联邦理工学院洛桑(EPFL)编程方法实验室研发,设计的初衷便是集成面向对象编程和函数式编程的特性。因此,Scala是一种纯粹的面向对象语言,秉承每个值都是对象的理念;同时Scala也是一门函数式的编程语言,其函数也可以当做值来使用。特点:面向对象、函数式、静态类型、可扩展安装过程简单,使用如下命令即可:tar-zxvfscala-2.12.17.tgz-C/usr/local#解压到/usr/local目录下安装完毕后,把scala命令所在的目录“/usr/local/scala/bin”增加到path中;在Ubuntu终端,输入“scala”命令,即可进入Scala简易开发环境。文本编辑器(gedit等)书写HelloWorld.scala;使用命令编译、执行scalacHelloWorld.scalascala-classpath.HelloWorld任务2.2分析某电动汽车的市场地位1.数据类型与变量现实生活中,我们使用的数据形态多样,囊括整数、小数、文本(文字符号)等;在程序设计中,也需要对数据的类型加以区分,从而完成不同的操作(例如数值可以进行四则运算,文本可以表示一个人的名字等)。程序设计中为了方便获取某个内存单元中的数据,会使用“标识符”来表示这个内存单元,该“标识符”即称为变量。Scala程序中,使用val关键字来定义的变量,又称为常量;程序运行过程中,常量一旦确定好其值后,不允许改变(重新赋值)。变量就是程序运行过程中可以改变(重新赋值)的量,变量使用关键字var来定义。运算符运算符:告诉Scala执行什么样的命令。在数学领域,我们可以执行加减乘除等运算;在Scala编程中,也提供了算术、关系、赋值、逻辑等运算。每一种运算,都使用一个独特的符号来表示,用于告诉Scala编译器需要执行什么样的计算逻辑。If分支结构在实际业务中,经常需要对数据进行差异化处理(不同值、类型采取不同的处理方法),或者根据不同条件执行不同功能代码,这时候可以使用if判断语句;Scala中if条件语句用法与Java等基本一致。函数函数是组织好的、可重复使用的、用来实现特定功能的代码段,它可以有效提升代码的重复利用率,用以构建更加复杂、更强大的程序。所谓匿名函数就是没有名字的函数(有的编程语言称为lambda表达式),即定义函数时省略函数名称;匿名函数使用“=>”来定义,等号左边为匿名函数参数列表,箭头右边为函数主体(所要实现的功能);(参数1:类型,参数2:类型,)=>{函数体语句}scala>(basic:Float,bonus:Float)=>{valtotal=basic+bonus;total}scala>(basic:Float,bonus:Float)=>basic+bonus//简化版,与上一行等价任务2.3统计某品牌的销售数量1.数组数组是程序设计中一个重要的数据结构,类似于一个容器,可以存储若干同类型的数据(数组中的数据亦称为元素);Scala中数组Array的书写形式如下:vararrayName:Array[T]=newArray[T](Num)对于数组而言,可以使用下标访问其中的某个元素或者给某元素赋值(与Java、C语言类似,Scala中数组的下标也是从0开始的),也可以在声明数组的时候直接给数组元素赋值。scala>varnums:Array[Int]=newArray[Int](3)//数组nums存储3个Int类型的数据,默认值均为0varnums:Array[Int]=Array(0,0,0)scala>nums(0)=10//修改数组nums的第1个元素(下标为0的元素)值为10scala>nums(1)=20//修改数组nums的第2个元素(下标为1的元素)值为20scala>nums(2)=30//修改数组nums的第3个元素(下标为2的元素)值为30scala>varcars:Array[String]=Array("BYD","XiaoMi","LiXiang")//定义数组,同时为其元素赋值varcars:Array[String]=Array(BYD,XiaoMi,LiXiang)scala>println("第一辆汽车:"+cars(0))//打印输出数组cars的第1个元素(下标为零的元素)第一辆汽车:BYD循环结构程序中,也可能需要多次执行同一行语句或者块代码,这是就用到循环结构。几乎所有的程序设计语言都有循环,Scala中的循环包括for循环、while循环;其中for循环的语法结构如下:for(变量<-容器){循环体语句}“变量<-容器”表示针对某个容器(数组就是一种典型的容器),逐个读取容器中的元素,然后赋值给某个临时变量,进而执行循环体语句;for循环执行流程如图2-11所示for循环有循环次数限定,而while循环则没有循环次数限定;while循环预设一个循环条件,只要该条件成立(结果为true),则重复执行循环体内的代码块(循环体内的语句);while循环的语法格式如下:while(循环条件){循环体语句}while循环的逻辑如图2-12所示。字符串的处理Scala直接使用了Java的字符串类,其用法与Java字符串一致。Scala中字符串使用双引号包裹,提供了丰富的方法帮助实现相关功能。序号方法功能说明1length()返回字符串的长度(包含的字符数)2equals()判断两个字符串是否相等3startsWith()/endsWith()判断字符串是否以指定的字符串开头/结尾4replace()将字符串中指定的字符串替换成指定的字符串;5contains()判断字符串中是否包含指定的字符串6substring(start,end)字符串截取,从指定的下标索引开始和结束,范围是左闭右开7split()字符串切割,按照指定的字符串对原字符串进行切割,得到一个字符串数组8trim()不改变原有字符串内容,只是去除字符串首尾的空白字符,包括空格、\t、\r、\n文件的操作Scala提供了Source类及伴生对象来读取文件(关于类、伴生对象的概念将在任务2.5中介绍)。scala>valdata=Source.fromFile("/home/hadoop/data/test.txt")//读取文件,返回一个迭代器(类似于数组)scala>vallines=data.getLines()//文件的每一行成为迭代器lines的一个元素任务2.4计算某热销车型的月均销售量元组Tuple元组Tuple是大数据处理中常用的数据类型,它可以包含不同类型的数据元素;元组使用小括号将这些数据元素包裹起来,数据元素之间用逗号分隔。代码newTupleN(元素1,元素2,...)可以创建元组,其中N为元组中元素的数量,N不能超过22;也可以直接简写为(元素1,元素2,...)。列表List列表List类似于数组,存储的元素通常为相同数据类型;但列表List是不可变的,List列表一旦生成,其元素不可改变scala>valcars:List[String]=List("BYD","LiXiang","HUWEI")scala>valcars=List("BYD","LiXiang","HUWEI")//简化形式,与上一行等效集合SetSet集合是没有重复的对象集合,且元素间没有顺序。scala>valfruits=Set("apple","orange","grape","blueberry")//创建Setscala>fruits.contains("orange")//判断Set中是否包含orangescala>fruits.take(3)//获取Set的前3个元素,返回一个新Set映射MapMap映射是一种可迭代的键值对(key/value)结构;Map中键Key是唯一的,所有的值Value都可以通过键Key来获取。Map中所有的键与值构成一种对应关系,这种对应关系即为映射。scala>valstudent=Map("Tom"->18,"Jerry"->20,"Petter"->19)scala>valstudent=Map(("Tom",18),("Jerry",20),("Petter",19))scala>student("Jerry")//获取Jerry对应的Value值,20高阶函数高阶函数(Higher-OrderFunction)就是操作其他函数的函数;如果一个函数使用另外一个函数作为参数,或者返回另外一个函数作为结果,那么这个函数就可以称为高阶函数。scala>defadd(a:Int,b:Int):Int=a+b//定义一个函数,计算两整数的和scala>defmultiply(a:Int,b:Int):Int=a*b//定义一个函数,计算两整数的积scala>defcal(f:(Int,Int)=>Int,a:Int,b:Int)=f(a,b)//,第1个参数为某函数scala>cal(add,10,20)//调用cal函数,第1个参数为add函数valres30:Int=30任务2.5计算各大品牌的市场占有率类与继承在Scala中,使用class关键字创建一个类,语法格式如下:class类名(参数1:参数类型,参数1:参数类型,...){成员变量成员方法}class是定义类的关键字,表明需要创建一个类;类名称后面可以加若干个参数(也可以没有参数),称之为类参数。类的主体部分为若干成员变量和成员方法,成员变量可以理解为描述类的属性(数据),成员方法代表类所具有的功能。继承与特质继承是面向对象的一个重要概念,当一个类继承另外一个类时,将自动获取另一个类的公有属性和方法。原有的类称为父类,而新的类称为子类。子类除了拥有父类的所有的属性及方法外,也可以拥有自己独特的属性与方法,还可以把父类中不合适的方法覆盖重写,从而展现更强大的功能。Scala使用extends关键字来表示继承关系,其语法格式如下:class子类(参数1,参数2,参数3,...)extends父类(参数1,参数2,...){子类的主体}模式匹配与样例类(1)模式匹配ifelse条件语句可以根据不同的条件执行不同的代码,实现不同的功能;但当分支较多时,书写带来不够方便,处理的灵活度也不高。为此,Scala提供了功能强大的模式匹配,可以实现条件判断、类型检查、“解构”等多种功能。一个模式匹配包含了一系列备选项,每个都开始于关键字case。每个备选项都包含了一个模式及一到多个表达式。箭头符号=>隔开了模式和表达式。(2)样例类在Scala中,使用了case关键字的类定义就是就是样例类(caseclasses),样例类是种特殊的类,经过优化以用于模式匹配。样例类没

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论