一、Scala简介
1、Scala的了解
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。
Scala是Scalable Language的简写,是一门多范式的编程语言,由联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala是一种将面向对象和函数式编程结合在一起的高级语言,旨在以简洁、优雅和类型安全的方式表达通用编程模式。Scala功能强大,不仅可以编写简单脚本,还可以构建大型系统。
Scala运行于Java平台,Scala程序会通过JVM被编译成class字节码文件,然后在操作系统上运行。其运行时候的性能通常与Java程序不分上下,并且Scala代码可以调用Java方法、继承Java类、实现Java接口等,几乎所有Scala代码都大量使用了Java类库。
Scala 是完全兼容Java的,其实Scala就是在Java语言的基础上增加了一层编码的 “壳”,让程序人员可以通过函数式编程的方式来开发程序。由于Scala最终被编译为.class,所以其实本质上还是Java,所以在Scala中可以任意的调用Java的API。好处显而易见:让Jva程序员可以更无障碍的转到Scala;让原先Java的API仍然可以在Scala中使用;公司中的Java平台不用替换就可以使用Scala。
2、函数式编程方法
函数式编程:将所有复杂的问题的解决,拆分为若干函数的处理。每一个函数可以去实现一部分功能,利用很多次函数的处理,最终解决问题。
函数式编程相对于面向对象编程,更加抽象,好处是,代码可以非常简洁,更多采用常量而不是变量来解决问题,这样额外带来的好处:在线程并发时,可以减少甚至杜绝多线程并发安全问题,特别适合于应用在处理高并发场景、分布式场景下的问题。函数式编程可以使用高阶函数,函数是一等公民,可以更加灵活的进行程序的编写。
函数式编程并不是面向对象编程的发展,而是另外一种解决问题的思路,两者之间也并没有绝对的好坏之分,在不同的场景中各有各的优缺点。
3、Scala的特点
3.1、面向对象
Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。 类可以被子类化,而且Scala 还提供了基于 mixin 的组合( mixin-based composition )。
类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承 的种种问题。
3.2、静态类型
Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:
- 泛型类
- 协变和逆变
- 标注
- 类型参数的上下限约束
- 把类别和抽象类型作为对象成员
- 复合类型
- 引用自己时显式指定类型
- 视图
- 多态方法
3.3、扩展性
cala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。 Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:
- 任何方法可用作前缀或后缀操作符
- 可以根据预期类型自动构造闭包。
3.4、动态性
Scala使用 Actor 作为其并发模型, Actor 是类似线程的实体,通过邮箱发收消息。 Actor 可以复用线程,因此可以在程序中可以使用数百万个Actor, 而线程只能创建数千个。在 2.10 之后的版本中,使用 Akka 作为其默认 Actor 实现。
二、Scala的下载与安装
本次学习我们准备采用Spark3.3.1,为了后续操作不出现任何匹配方面的问题,建议采用跟Spark版本匹配的Scala。
根据Spark官网建议,我们最好下载Scala 2.13版本
1、到Scala官网下载Scala
Scala2.13.10下载网址:https://www.scala-lang.org/download/2.13.10.html
![](https://i-blog.csdnimg.cn/blog_migrate/381fbb3a6bc9465460a470b6f622f14c.png)
单击【scala-2.13.10.msi】超链接,将scala安装程序下载到本地
然后根据安装向导,选择安装的位置,点击安装
2、配置环境变量
设置Windows系统的环境变量
变量名 | 变量值 |
SCALA_HOME | C:\Program Files (x86)\scala |
Path | %SCALA_HOME%\bin |
注意:SCALA_HOME的变量值为Scala安装位置
通常Scala安装完成后会自动将Scala的bin目录的路径添加到系统Path变量中。若Path变量中无该路径,则需要手动添加。
![](https://i-blog.csdnimg.cn/blog_migrate/2844748b3073f411af550b4a2660a510.png)
3、测试Scala是否安装成功
3.1、查看Scala版本
启动命令行窗口,执行scala -version命令,若能正确输出当前Scala版本信息,则说明安装成功
![](https://i-blog.csdnimg.cn/blog_migrate/dac503569f73d62d9510bbbfc3274869.png)
3.2、启动Scala,执行语句
在命令行提示后输入scala,则会进入Scala的命令行模式,在此可以编写Scala表达式和程序
![](https://i-blog.csdnimg.cn/blog_migrate/5bca743df12c0c0132a33a37b1bd87bb.png)
val - value:用于定义Scala常量
var - variable:用于定义Scala变量
常量只能赋值一次,再次赋值是不允许的
Scala里val定义的变量相当于Java里用final定义的变量,其实都是常量,不能再给它赋值
三、虚拟机上安装Scala
到官网下载Scala安装包
Scala2.13.10下载网址:https://www.scala-lang.org/download/2.13.10.html
![](https://i-blog.csdnimg.cn/blog_migrate/0f43c188abf7e7fd7084920a778044aa.png)
单击【scala-2.13.10.tgz】超链接,将scala安装包下载到本地
上传到master虚拟机并安装Scala
2.1、登录虚拟机
![](https://i-blog.csdnimg.cn/blog_migrate/e72d0133498ac873451f98d3b0ad5dd9.png)
2.2、上传Scala安装包到虚拟机
进入/opt目录,将scala安装包上传到该目录
![](https://i-blog.csdnimg.cn/blog_migrate/fa83c9503e785b11681a6fa4c3f8943c.png)
2.3、解压scala安装包到指定目录
执行命令:tar -zxvf scala-2.13.10.tgz -C /usr/local
配置Scala环境
执行命令:vim /etc/profile
![](https://i-blog.csdnimg.cn/blog_migrate/cb560cb338e0b1513495e652f1967eff.png)
export SCALA_HOME=/usr/local/scala-2.13.10
export PATH=$SCALA_HOME/bin:$PATH
存盘退出后,执行命令:source /etc/profile,让环境配置生效
测试Scala是否安装成功
4.1、查看Scala版本
执行scala -version命令,若能正确输出当前Scala版本信息,则说明安装成功
![](https://i-blog.csdnimg.cn/blog_migrate/ce605ad67464a5e4953b687bd1d5d127.png)
注意:如果报错,是因为没有安装jdk,本机因安装了jdk,所以没报错
4.2、启动Scala,执行语句
在命令行提示后输入scala,则会进入Scala的命令行模式,在此可以编写Scala表达式和程序
![](https://i-blog.csdnimg.cn/blog_migrate/29e7506de2f75f8f2a5fdbb7525bf6a4.png)
演示语句块的返回值,语句块最后一条语句的值就是整个语句块的值
![](https://i-blog.csdnimg.cn/blog_migrate/2f6933fe7e156ab0a73b699d196e4410.png)
演示if-else结构的返回值
![](https://i-blog.csdnimg.cn/blog_migrate/153862e766edf293e6b15643853b491e.png)
计算1 + 2 + 3 + …… + 100的值
![](https://i-blog.csdnimg.cn/blog_migrate/a56f344bc6cbbb6d66825e6a45b8851f.png)
打印字符直角三角形
![](https://i-blog.csdnimg.cn/blog_migrate/1a4c12f2445dffc7cd0954e9aa37722c.png)
四、Scala的使用
Scala可以在交互模式和编译模式两种方式下运行
交互模式
1.1、命令行方式
直接在scala>提示符后敲代码执行
![](https://i-blog.csdnimg.cn/blog_migrate/099f66e4b2b9a82fc7433f8c4b559df1.png)
在scala>提示符之后输入:quit (或者按快捷键:Ctrl + D),退出scala交互模式
![](https://i-blog.csdnimg.cn/blog_migrate/b2688021aa43c4934f6e992973f2003a.png)
1.2、文件方式
将代码写在xxx.scala文件中,通过scala xxx.scala执行文件中的代码
创建/scala_work目录,进入该目录,执行命令:vim sum.scala
![](https://i-blog.csdnimg.cn/blog_migrate/4f69a095f8c0fba9df8c5ad74f742472.png)
执行命令:scala sum.scala
![](https://i-blog.csdnimg.cn/blog_migrate/e20fddba3937a5e3fe282c9b676c6e11.png)
编译模式
将代码写在.scala文件中,通过编译命令将.scala编译为.class,然后去解释执行。在.scala文件中编写好代码,创建对象,包含入口函数。通过scalac 或 fsc 命令进行编译,产生对应的.class文件。再通过scala命令来解释执行对象。scalac 和 fsc 都可以进行编译工作,区别是fsc会启动后台服务常驻系统后台,这样后续再进行编译的时候,速度就可以很快。
2.1、创建源程序
在\scala_work目录里创建文件HelloWorld.scala
![](https://i-blog.csdnimg.cn/blog_migrate/88216ba6ce5dc4e68e314e938a130da8.png)
2.2、编译字节码
利用scalac将HelloWorld.scala编译成字节码文件HelloWorld.class
![](https://i-blog.csdnimg.cn/blog_migrate/00147f95cf4fa2bb511e8bba4d34b18b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9873264abe4ec59aba2a75555ba573db.png)
2.3、解释执行对象
![](https://i-blog.csdnimg.cn/blog_migrate/27bdf96bf0c77ed4993ceac9632acef2.png)
五、课后练习
独自在虚拟机上安装Scala
练习Scala的一些命令