《通信数据分析与实战》课件-第一章 Scala 语言基础_第1页
《通信数据分析与实战》课件-第一章 Scala 语言基础_第2页
《通信数据分析与实战》课件-第一章 Scala 语言基础_第3页
《通信数据分析与实战》课件-第一章 Scala 语言基础_第4页
《通信数据分析与实战》课件-第一章 Scala 语言基础_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

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

文档简介

通信数据分析与实战Scala语言基础第一章第1节2了解Scala的特点作用掌握Scala的下载安装掌握IDEA的下载安装学习目标TARGETSpark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术,本身就是计算数据,而Scala既有面向对象组织项目工程的能力,又具备计算数据的功能,同时Spark和Scala的紧密集成,我们将采用Scala语言开发Spark程序,所以学好Scala将有助于我们更好的掌握Spark框架Scala的概述Scala于2001年由洛桑联邦理工学院(EPFL)的编程方法实验室研发,它由MartinOdersky(马丁•奥德斯基)创建。目前,许多公司依靠Java进行的关键性业务应用转向或正在转向Scala,以提高其开发效率、应用程序的可扩展性和整体的可靠性。Scala的概述Scala的特点Scala是ScalableLanguage的简称,它是一门多范式的编程语言,其设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。具体特性如右图所示:面向对象函数式编程静态类型扩展性高交互性好Scala的安装流程Scala语言可以运行在Windows、Linux、MacOS等系统上。由于Scala是运行在JVM平台上的,所以安装Scala之前必须配置好JDK环境(JDK版本要求不低于1.5版本)。课程中使用的JDK版本是jdk1.8。Scala的安装流程安装JDK安装Scala安装IDEA安装Scala插件(1)下载JDK(2)安装JDK(3)配置JDK环境变量(4)JDK环境变量验证JDK的安装1、下载JDKJDK的安装去官网下载对应的javaJDK的版本1、下载JDKJDK的安装选择JDK8.0版本2、安装JDKJDK的安装2、安装JDKJDK的安装3、配置JDK的环境变量JDK的安装我的电脑右击选择属性页面下拉选择高级系统设置4、JDK的环境验证JDK的安装查看java版本:java-versionLinux的JDK环境在Hadoop中已经安装好了,无须安装第二次(1)下载Scala安装包(2)解压Scala(3)配置Scala环境变量(4)Scala验证Scala的安装1、下载ScalaScala的安装去官网下载对应的Scala的版本Scala的安装2、解压scala-2.11.8.zip-ScalaScala的安装3、配置Scala的环境变量我的电脑右击选择属性页面下拉选择高级系统设置Scala的安装3、配置Scala的环境变量Scala的安装4、Scala验证FinalShell-工具安装FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费远程服务器远程桌面加速ssh加速本地化命令输入框支持自动补全命令历自定义命令参数FinalShell-工具安装双击图标安装,如果遇到windows安全提示请点击确认FinalShell-工具安装同意协议FinalShell-工具安装点击下一步FinalShell-工具安装设置安装位置FinalShell-工具安装安装成功打开页面效果(1)下载Scala-Linux安装包(2)上传至Linux-hadoop集群(3)解压Scala(4)配置Scala环境变量(5)验证ScalaScala的安装Scala的安装2、上传解压ScalaScala的安装3、配置Scala的环境变量--1.编辑环境变量的配置文件vietc/profile

--2.设置内容export

SCALA_HOME=/export/servers/scala-2.11.8export

PATH=$PATH:$SCALA_HOME/bin:

--3.生效配置文件source/etc/profileScala的安装4、验证Scala(1)下载Scala-Mac安装包(2)解压Scala(3)配置Scala环境变量(4)Scala验证Scala的安装Scala的安装2、解压Scala并配置Scala的环境变量-验证--双击解压Scala安装包,移动到到Mac的主目录下(如果找不到主目录,可以使用快捷键Shit+Commond+H进入电脑主目录)

--1.编辑环境变量的配置文件vi~/.bash_profile

--2.设置内容export

PATH=安装路径/Scala/bin:--验证scala打开终端输入-scala-version工具介绍目前Scala的主流开发工具主要有两种:分别是Eclipse工具和IDEA工具,我们可以在这两个开发工具中安装对应的Scala插件进行Scala开发。由于IDEA工具可以自动识别代码错误和进行简单的修复、以及IDEA工具内置了很多优秀的插件,所以现在大多数的Scala开发程序员都会选择IDEA作为开发Scala的工具。(1)官网下载IDEA安装包(2)双击解压安装IDEA的安装(1)官网下载IDEA安装包IDEA的安装(2)双击解压安装IDEA的安装(2)双击解压安装IDEA的安装(2)双击解压安装IDEA的安装(1)下载Scala插件(2)在IDEA中导入(3)重启IDEAScala的插件安装(1)下载Scala插件Scala的插件安装(2)在IDEA中导入Scala的插件安装(2)在IDEA中导入Scala的插件安装(3)重启IDEAScala的插件安装1.新建Scala项目和文件开发第一个Scala程序2.创建包和Scala类开发第一个Scala程序3、在HelloWorld.scala文件中编写代码开发第一个Scala程序objectHelloWorld{

defmain(args:Array[String]){

println("Hello,world!")

}}4、运行代码开发第一个Scala程序48小结了解Scala的特点作用掌握Scala的下载安装掌握IDEA的下载安装通信数据分析与实战Scala语言基础第一章第2节50掌握Scala声明变量掌握Scala的数据类型掌握Scala的运算符掌握Scala的控制结构语句掌握Scala的方法和函数学习目标TARGETScala的概述声明值和变量Scala有两种类型的变量,一种是使用关键字var声明的变量,值是可变的;另一种是使用关键字val声明的变量,也叫常量,值是不可变的。var值可变varname:String=“屠呦呦”val值不可变valage:Int=18Scala的数据类型Scala的数据类型数据类型描述Byte8位有符号补码整数。数值区间为-128到127Short16位有符号补码整数。数值区间为-32768到32767Int32位有符号补码整数。数值区间为-2147483648到2147483647Long64位有符号补码整数。数值区间为-9223372036854775808到9223372036854775807Float32位,IEEE754标准的单精度浮点数Double64位IEEE754标准的双精度浮点数Char16位无符号Unicode字符,区间值为U+0000到U+FFFFString字符序列Booleantrue或falseUnit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。Nullnull或空引用NothingNothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。AnyAny是所有其他类的超类AnyRefAnyRef类是Scala里所有引用类(referenceclass)的基类Scala的运算符和重载Scala中算术操作符(+、-、*、/、%)的作用和Java是一样的,位操作符(&、|、>>、<<)也是一样的。特别强调的是,Scala的这些操作符其实是方法。例如,a+b其实是a.+(b)的简写。运算符描述实例+加号A+B运算结果为30-减号A-B运算结果为-10*乘号A*B运算结果为200/除号B/A运算结果为2%取余B%A运算结果为0Scala的运算符和重载运算符描述实例==等于(A==B)运算结果为false!=不等于(A!=B)运算结果为true>大于(A>B)运算结果为false<小于(A<B)运算结果为true>=大于等于(A>=B)运算结果为false<=小于等于(A<=B)运算结果为trueScala的运算符和重载运算符描述实例&&逻辑与(A&&B)运算结果为false||逻辑或(A||B)运算结果为true!逻辑非!(A&&B)运算结果为trueScala的控制结构语句条件描述If(条件){}单条件If(条件){}else{}单条件If(条件){}elseIf(条件){}else{}多条件Scala的控制结构语句循环类型描述for循环用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。while循环运行一系列语句,如果条件为true,会重复运行,直到条件变为false。do...while循环类似while语句区别在于判断循环条件之前,先执行一次循环的代码块。Scala的控制结构语句For循环操作for(变量<-表达式/数组/集合){

循环体语句;}for(i<-0

to

9){

print(i+"")}

for(i<-0

to

9;ifi%2==0;ifi>5){

print(i+"")}Scala的控制结构语句DoWhile循环操作do{

循环语句;}while(布尔表达式)do{print(x+"”)

x+=1}while(x<20)Scala的方法和函数在Scala中,它和Java一样也是拥有方法和函数。Scala的方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说,在类中定义的函数即是方法。Scala中可以使用def语句和val语句定义函数,而定义方法只能使用def语句。下面我们分别对Scala的方法和函数进行讲解:Scala的方法方法定义deffunctionName([参数列表]):[returntype]={ functionbody

return[expr]}defadd(a:Int,b:Int):Int={ varsum:Int=0 sum=a+b returnsum}Scala的方法方法调用//没有使用实例的对象调用格式functionName(参数列表)//方法使用实例的对象来调用,我们可以使用类似java的格式(使用“.”号)[instance.]functionName(参数列表)Scala的方法方法调用scala>:paste

#多行输入模式的命令

objectTest{

defaddInt(a:Int,b:Int):Int={

varsum:Int=0

sum=a+b

returnsum

}

}

scala>Test.addInt(4,5)

res0:Int=9Scala的方法提升Scala方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归方法来说,必须要指定返回类型。defm1(num:Int):Int={

if(num<=1)1

elsem1(num-1)*num}Scala的函数函数定义#Scala中的函数是一个对象,可以赋值给一个变量.valfunctionName=([参数列表])=>functionbodyvaladdInt=(a:Int,b:Int)=>a+b#函数调用和方法调用是一样的addInt(10,20)Scala的方法转换函数转换定义val

f1=m_;//m代表定义好的方法scala>defm(x:Int,y:Int):Int=x*y #定义方法m:(x:Int,y:Int)Intscala>valf=m_f:(Int,Int)=>Int=(function2) #函数68小结掌握Scala声明变量掌握Scala的数据类型掌握Scala的运算符掌握Scala的控制结构语句掌握Scala的方法和函数通信数据分析与实战Scala语言基础第一章第3节70掌握数组的定义和操作掌握元组的定义和操作掌握集合的定义和操作学习目标TARGETScala的数据结构在编写程序代码时,经常需要用到各种的数据结构,选择合适的数据结构可以带来更高的运行或者存储效率,Scala提供了许多数据结构,例如常见的[数组]、[元组]和[集合]等对于每一门编程语言来说,数组(Array)都是重要的数据结构之一,主要用来存储数据类型相同的元素。Scala中的数组分为定长数组和变长数组,定义定长数组,需要使用new关键字,而定义变长数组时,则需要导包importscala.collection.mutable.ArrayBuffer。数组的定义Scala中的数组分为定长数组和变长数组,定义定长数组,需要使用new关键字,而定义变长数组时,则需要导包importscala.collection.mutable.ArrayBuffer。定义定长数据方式

newArray[T](数组长度)定义变长数据方式

ArrayBuffer[T]()数组的操作

定义数组追加操作插入操作删除操作定义定长数组valarr1=newArray[Int](8)定义变长数组(需提前导包)valab=ArrayBuffer[Int]()追加元素:ab+=1追加定长数组:ab++=Array(6,7)追加变长数组:ab++=ArrayBuffer(8,9)在数组某个位置插入元素ab.insert(0,-1,0)删除数组中的第一个元素ab.remove(0)数组的循环定义数组遍历输出转换操作定义数组varmyArr=Array(1.9,2.9,3.4,3.5)定义数组valarr=Array(1,2,3,4,5,6,7,8,9)打印输出所有的数组元素for(x<-myArr){print(x+"")}将偶数取出乘以10后再生成一个新的数组valnewArr=for(e<-arrife%2==0)yielde*10元组的定义Scala的元组是对多个不同类型对象的一种简单封装,它将不同的值用小括号括起来,并用逗号作分隔,即表示元组。定义元组格式

valtuple=(元素,元素...)元组的操作定义元组元组取值拉链操作定义元组valtuple=(“钟南山",3.14,65535)valscores=Array(88,95,80)valnames=Array(“于敏”,“李延年”,“张富清")获取元组中的第一个值:tuple._1 获取元组中的第二个值:tuple._2拉链操作names.zip(scores)集合概述在Scala中,集合有三大类:

List、Set以及Map,所有的集合都扩展自Iterable特质。Scala集合分为可变的(mutable)和不可变(immutable)的集合。其中,可变集合可以在适当的地方被更新或扩展,意味着可以对集合进行修改、添加、移除元素;不可变集合类,相比之下,初始化后就永远不会改变。集合特点ListArraySet无重复元素Map可迭代的键值对List的定义List列表和数组类似,列表的所有元素都具有相同类型。然而,列表与数组不同的是,列表默认是不可变的。如果要定义可变列表,需要导入`importscala.collection.mutable.ListBuffer`包//字符串valfruit:List[String]=List("apples","oranges","pears")//整型valnums:List[Int]=List(1,2,3,4)//空valempty:List[Nothing]=List()//二维列表valdim:List[List[Int]]=List(List(1,0,0),List(0,1,0),List(0,0,1))List的定义可以使用“Nil”和“::”操作符来定义列表。//字符串valfruit="apples"::("oranges"::("pears"::Nil))//整型valnums=1::(2::(3::(4::Nil)))//空列表valempty=Nil//二维列表valdim=(1::(0::(0::Nil)))::(0::(1::(0::Nil)))::(0::(0::(1::Nil)))::NilList的常用操作列表List作为数据结构之一,Scala也提供了很多操作List的方法。接下来,我们列举一些操作List常见的方法,具体如下所示:List的常用操作object

ListTest{

def

main(args:Array[String]){

valfruit="apples"::("oranges"::("pears"::Nil))

valnums=Nil

println("Headoffruit:"

+fruit.head)

println("Tailoffruit:"+fruit.tail)

println("Checkiffruitisempty:"

+fruit.isEmpty)

println("Checkifnumsisempty:"

+nums.isEmpty)

println("Tailoffruit:"

+fruit.take(2))

println("Containsoffruit:"

+fruit.contains("apples"))

}

}Set的定义Set是没有重复对象的集合,所有元素都是唯一的。默认情况下,Scala使用不可变Set集合,若想使用可变的Set集合,则需要引入scala.collection.mutable.Set包。定义Set集合格式

valset:Set[Int]=Set(1,2,3,4,5)Set的常用操作接下来,我们列举一些操作Set集合的常见方法,具体如下所示:Set的常用操作objectSetTest{

defmain(args:Array[String]){

valsite=Set(“于敏”,“申纪兰”,“黄旭华")

valnums:Set[Int]=Set()

println("第一网站是:"

+site.head)

println(“Tail网站是:"

+site.tail)

println("查看集合site是否为空:"

+site.isEmpty)

println("查看nums是否为空:"

+nums.isEmpty)

println("查看site的前两个网站:"

+site.take(2))

println("查看集合是否包含网站于敏:"+site.contains("于敏"))

}}Map的定义Map是一种可迭代的键值对(key/value)结构,并且键是唯一的,值不一定是唯一的,所有的值都是通过键来获取的。Map中所有元素的键与值都存在一种对应关系,这种关系即为映射。Map有两种类型,可变集合与不可变集合,默认是不可变Map。若需要使用可变的Map集合,则需要引入importscala.collection.mutable.Map类。定义Map集合格式varA:Map[Char,Int]=Map(键->值,键->值...)Map的常用操作接下来,我们列举一些操作Map集合的常见方法,具体如下所示:objectMapTest{

defmain(args:Array[String]){

valcolors=Map("red"->"#FF0000",

"azure"->"#F0FFFF",

"peru"->"#CD853F")

valperuColors=if(colors.contains("peru"))colors("peru")else0

valazureColor=colors.getOrElse("azure",0)

println("获取colors中键为red的值:"+colors("red"))

println("获取colors中所有的键:"

+colors.keys)

println("获取colors中所有的值:"

+colors.values)

println("检测colors是否为空:"

+colors.isEmpty)

println("判断colors是否包含键peru包含则返回对应值,否则返回0:"+peruColors)

println("判断colors是否包含键azure,包含则获取对应值,否则返回0:"+azureColor)

}}Map的常用操作88小结掌握数组的定义和操作掌握元组的定义和操作掌握集合的定义和操作通信数据分析与实战Scala语言基础第一章第4节90掌握Scala类的创建掌握Scala对象实例化掌握Scala继承操作掌握Scala的伴生对象的使用掌握Scala的特质的使用学习目标TARGET类与对象Scala是一种面向对象的语言,类都是对象的抽象,而对象都是类的具体实例;类不占用内存,而对象占用存储空间。由于面向对象的核心是对象,若想要在应用程序中使用对象,就必须得先创建一个类。类是用于描述一组对象的共同特征和行为。创建类的格式class类名[参数列表]类名对象名称=new类名();创建对象的格式对象实例化并调用

我们创建一个Point类,并在类中定义两个字段x和y以及一个没有返回值的move()方法,使用Point类的实例对象来访问类中的方法和字段

classPoint(xc:Int,yc:Int){

varx:Int=xc

vary:Int=yc

defmove(dx:Int,dy:Int){

x=x+dx

y=y+dy

println("x的坐标点:"

+x);

println("y的坐标点:"

+y);

}}对象实例化并调用objectClassTest{ defmain(args:Array[String]){ valpt=newPoint(10,20);

//移到一个新的位置

pt.move(10,10); }}Scala的继承

Scala是单继承,只允许继承一个父类。Scala可以继承父类中的所有属性和方法。如果子类要重写一个父类中的非抽象方法,则必须使用override关键字,否则会出现语法错误。如果子类要重写父类中抽象方法时,则无需使用override关键字在Scala子类继承父类的时候,有以下几点需要注意Scala的继承创建一个Point类和一个Location类,并且Location类继承Point类,演示子类Location重写父类Point中的字段,具体代码如下:#创建Point类,实现move方法classPoint(valxc:Int,valyc:Int){

varx:Int=xc

vary:Int=yc

defmove(dx:Int,dy:Int){

x=x+dx

y=y+dy

println("x的坐标点:"

+x);

println("y的坐标点:"

+y);

}

}Scala的继承#创建Location类并继承PointclassLocation(valxc:Int,valyc:Int,valzc:Int)extendsPoint(xc,yc){ varz:Int=zc defmove(dx:Int,dy:Int,dz:Int){ x=x+dx y=y+dy z=z+dz println("x的坐标点:"+x); println("y的坐标点:"+y); println("z的坐标点:"+z); }}Scala的继承#实例化子类并调用move方法objectExtendsTest{ defmain(args:Array[String]){ valloc=newLocation(10,20,15); //移到一个新的位置

loc.move(10,10,5); }}单例和伴生对象在Scala中,没有静态方法或静态字段,所以不能用类名直接访问类中的方法和字段,而是创建类的实例对象去访问类中的方法和字段。但是,Scala中提供了object这个关键字用来实现单例模式,使用关键字object创建的对象为单例对象。创建单例对象objectobjecName单例和伴生对象//单例对象objectSingletonObject{ defhello(){ println(“Hello屠呦呦!")}}objectSingleton{defmain(args:Array[String]){

SingletonObject.hello() }}单例和伴生对象在Scala中,一个源文件中有一个类和一个单例对象,若单例对象名与类名相同,则把这个单例对象称作伴生对象(companionobject),这个类则被称为是单例对象的伴生类(companionclass)。类和伴生对象之间可以相互访问私有的方法和字段。单例和伴生对象classPerson{

valage=93privatevarname=“袁隆平"

defprintName():Unit={

//在Person类中可以访问伴生对象Person的私有字段

println(Person.TITLE+name)}

//伴生对象objectPerson{

//伴生对象中的私有字段

privatevarTITLE=“杂交水稻之父"

//主方法

defmain(args:Array[String]):Unit={

valperson=newPerson()

//访问私有的字段name

person.name=“于敏"

person.printName()

}}Scala的特质在Scala中,Trait可以对定义字段和方法进行实现,Trait可以被类和对象(Objects)使用关键字extends来继承。创建特质的格式

traittraitNameScala的特质traitAnimal{

defspeak()

deflisten():Unit={

}

defrun():Unit={

println("I'mrunning")

}

classPeopleextendsAnimal{

overridedefspeak():Unit={

println("I'mspeakingEnglish")

}}

objectPeople{

defmain(args:Array[String]):Unit={

varpeople=newPeople()

people.speak()

people.listen()

people.run()

}

}下面,我们创建一个特质Animal,演示类继承特质并访问特质中方法的操作。104小结掌握Scala类的创建掌握Scala对象实例化掌握Scala继承操作掌握Scala

温馨提示

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

评论

0/150

提交评论