目录
7.1 获取映射中的key 【keySet函数/keys函数】
了解Scala语言
- Scala是Scalable Language的缩写,是一种多范式的编程语言,由洛桑联邦理工学院的马丁·奥德斯在2001年基于Funnel的工作开始设计,设计初衷是想集成面向对象编程和函数式编程的各种特性。
- Scala 是一种纯粹的面向对象的语言,每个值都是对象。Scala也是一种函数式语言,因此函数可以当成值使用。
- 由于Scala整合了面向对象编程和函数式编程的特性,因此Scala相对于Java、C#、C++等其他语言更加简洁。
- Scala源代码会被编译成Java字节码,因此Scala可以运行于Java虚拟机(Java Virtual Machine,JVM)之上,并可以调用现有的Java类库。
了解Scala特性
- 面向对象
- 函数式编程
- 静态类型
- 可扩展
一、安装与运行Scala
1.1 在网页上运行Scala
- 通过浏览器查找Scastie并进入,即可进入Scala在线运行环境
- 进入Scastie界面后,在上窗格中输入“println("hello world")”
- 单击“Run”按钮,输出信息将显示在下窗格中,如下图
1.2 Scala环境设置
- Scala运行环境众多,可以运行在Windows、Linux、macOS等系统上。Scala是运行在JVM上的语言,因此必须确保系统环境中安装了JDK,即Java开发工具包,而且必须确保JDK版本与本书安装的Spark的JDK编译版本一致,本书中使用的JDK是JDK(Java 1.8)
- 查看Java版本
1.3 Scala安装
1.3.1 在Linux和macOS系统上安装Scala
- 从Scala官网下载Scala安装包,安装包名称为“scala-2.12.15.tgz”
- 将其上传至/opt目录
- 解压安装包至/usr/local目录下
- 配置Scala环境变量
1.3.2 在Windows系统上安装Scala
- 从Scala官网下载Scala安装包,安装包名称为“scala.msi”
- 双击scala.msi安装包,开始安装软件
- 进入欢迎界面,单击右下角的“Next”按钮后出现许可协议选择提示框,选择接受许可协议中的条款并单击右下角的“Next”按钮
- 选择安装路径,本文Scala的安装路径选择在非系统盘的“D:\Program Files (x86)\spark\scala\” ,单击“OK”按钮进入安装界面
- 在安装界面中单击右下角的“Install”按钮进行安装,安装完成时单击“Finish”按钮完成安装
- 右键单击“此电脑”图标,选择“属性”选项,在弹出的窗口中选择“高级系统设置”选项。在弹出的对话框中选择“高级”选项卡,并单击“环境变量”按钮,在环境变量对话框中,选择“Path”变量并单击“编辑”按钮,在Path变量中添加Scala安装目录的bin文件夹所在路径,如“D:\Program Files (x86)\spark\scala\bin”
1.4 Scala运行
- Scala解释器也称为REPL(Read-Evaluate-Print-Loop,读取-执行-输出-循环)
- 在命令行中输入“scala”,即可进入REPL,如下图
- REPL是一个交互式界面,用户输入命令时,可立即产生交互反馈
- 输入“:quit”命令即可退出REPL,如下图
- 右图是一个Scala类,该类实现了两个数相加的方法
- 如果要使用该方法,那么需要通过import加载该方法,如左图,其中,add是类名,addInt是方法名
二、定义函数识别号码类型
2.1了解数据类型
2.1.1 Scala常用数据类型
- Scala会区分不同类型的值,并且会基于使用值的方式确定最终结果的数据类型,这称为类型推断
- Scala使用类型推断可以确定混合使用数据类型时最终结果的数据类型
- 如在加法中混用Int和Double类型时,Scala将确定最终结果为Double类型,如下图
2.1.2 定义与使用常量、变量
- 常量
在程序运行过程中值不会发生变化的量为常量或值,常量通过val关键字定义,常量一旦定义就不可更改,即不能对常量进行重新计算或重新赋值。
- 变量
变量是在程序运行过程中值可能发生改变的量。变量使用关键字var定义。与常量不同的是,变量定义之后可以重新被赋值。
2.1.3使用运算符


2.1.4 定义与使用数组
- 数组常用的方法
- 数组的使用
- Scala可以使用range()方法创建区间数组
- 使用range()方法前同样需要先通过命令“import Array._”导入包
2.1.5 定义与使用函数
- 函数是Scala的重要组成部分,Scala作为支持函数式编程的语言,可以将函数作为对象
- Scala提供了多种不同的函数调用方式
- 如果函数定义在一个类中,那么可以通过“类名.方法名(参数列表)”的方式调用
2.1.6 匿名函数
- 匿名函数即在定义函数时不给出函数名的函数
- Scala中匿名函数是使用箭头“=>”定义的,箭头的左边是参数列表,箭头的右边是表达式,表达式将产生函数的结果
- 通常可以将匿名函数赋值给一个常量或变量,再通过常量名或变量名调用该函数
- 若函数中的每个参数在函数中最多只出现一次,则可以使用占位符“_”代替参数。
2.1.7 高阶函数—函数作为参数
- 高阶函数指的是操作其他函数的函数
- 高阶函数可以将函数作为参数,也可以将函数作为返回值
- 高阶函数经常将只需要执行一次的函数定义为匿名函数并作为参数。一般情况下,匿名函数的定义是“参数列表=>表达式”
- 由于匿名参数具有参数推断的特性,即推断参数的数据类型,或根据表达式的计算结果推断返回结果的数据类型,因此定义高阶函数并使用匿名函数作为参数时,可以简化匿名函数的写法
2.1.8 高阶函数—函数作为返回值
- 高阶函数可以产生新的函数,并将新的函数作为返回值
- 定义高阶函数计算矩形的周长,该函数传入一个Double类型的值作为参数,返回以一个Double类型的值作为参数的函数,如下图
(9)函数柯里化
- 函数柯里化是指将接收多个参数的函数变换成接收单一参数(最初函数的第一个参数)的函数,新的函数返回一个以原函数余下的参数为参数的函数。
- 定义两个整数相加的函数,一般函数的写法及其调用方式 如下图
- 使用函数柯里化
三、循环控制
3.1 for循环
- 基本语法:
for ( 循环变量 <- 数据集 ) {
循环体
}
这里的数据集可以是任意类型的数据集合
object ScalaLoop {
def main(args: Array[String]): Unit = {
for ( i <- Range(1,5) ) { // 范围集合 [1,5)
println("i = " + i )
}
for ( i <- 1 to 5 ) { // [1,5]
println("i = " + i )
}
for ( i <- 1 until 5 ) { // 不包含5
println("i = " + i )
}
}
}
- 循环守卫
循环时可以增加条件来决定是否继续循