Scala 的发展历史
java 大概是在 92 年的时候出生的
scala 在 2003 年出生
2003 - 2013 年的时候,一直无人问津.
2013 年的时候,开始变火 ,spark 框架诞生了,这个带火了scala,因为这个框架的底层就是使用scala开发的
spark 可以使用 java 语言开发,也可以使用 Scala 语言开发等等
看完本文后的能力:
能力1: 熟练使用 Scala 开发 spark 程序.
能力2 : 使用 scala 开发一个简易的通信框架
能力3 : 阅读 spark 的源码
1. scala 的基本介绍
为什么要学 Scala
1.优雅: 这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,APO 是否优雅灰直接影响到用户的体验
2.速度快: Scala 语言表达能力强,一行代码抵得上 Java 多行,开发速度快,Scala 是静态编译的,所以和 JRuby , Groovy 比起来速度会快很多.
3.能融合到 Hadoop 生态圈: Hadoop 现在是一个大数据的事实标准, Spark 并不是要取代 Hadoop ,而是要完善 Hadoop 生态圈, JVM 语言大部分可能会想到 Java ,但 Java 做出来的 API 太丑 ,或者想实现一个优雅的 API 太费劲了.
使用最多的版本是 2.11.
还有一个是2.10.x 版本也是比较多人用的,但是呢这个和上面那个不兼容的
scala 在数据处理上面,真的是非常的简洁,
2.scala 开发环境的安装
Windows 版本,建议去官网直接下载 zip 的安装包,直接解压后,.一定要注意的是,解压到一个没有中文没有空格的路径下面去.然后配置 SCALA_HOME 的环境变量就好了.这个本来没有的要新建.
关于:用户变量和系统变量,这两个都可以,只不过是其权限 不同罢了,有些公司会把用户变量或者系统变量的修改权限给你禁掉.
右击我的电脑,单击"属性",进入如图所示页面。下面开始配置环境变量,右击【我的电脑】--【属性】--【高级系统设置】--【环境变量】
1.HOME 的后面接上解压后的文件夹.
SCALA_HOME=D:\develop\scala-2.11.8
2.配置Path : 就是刚刚添加的环境变量的名称的前面和后面都添加 % 号,然后在后面添加 \bin
%SCALA_HOME%\bin
3. 到这里就配置完成了我们的win 的 scala ,在我们的黑窗口CMD中敲击命令 : scala 去检验是否安装成功.
3. Scala 开发工具安装
目前的 Scala 的开发工具主要有两种: Eclipse 和 IDEA ,.这两个开发工具都有相应的 Scala 插件, 如果使用 Eclipse ,直接到 Scala 官网进行下载对应的版本就很可以了.
http://scala-ide.org/download/sdk.html
由于IDEA 的 Scala 插件更加的优秀,大多数的 Scala 程序员都使用 IDEA 进行开发的,我们可以通过IDEA 进行在线安装,也可以到 IDEA 的插件网进行下载对应的版本插件进行离线安装,
http://www.jetbrains.com/idea/download/
我们进入了 Plugins 之后,可以使用在线安装,下面展示的是IDEA 2017(这个版本目前最多人用)也可以使用离线安装,标红的位置就是使用我们本地安装,这个安装包就是我们刚刚去网站进行下载的包.当然也可以使用中间和左边的在线安装,更加的方便.
我们这里推荐使用离线进行安装,因为在线国外的原因网速多少挺慢甚至没有的.
到这里我们就已经在我们的工具中安装好了 Scala 开发工具了, 然后重启我们 IDEA
4. Scala 的 REPL(ReadEvalPrint Loop/ 交互式解释器(其实按照单个的单词进行翻译更好一些)
R (Read /阅读), E(Evaluate / 评估) , P(Print / 打印输出) , L(Loop / 循环)
交互式解析器会读取输入内容,并对它进行求职,再返回结果,并重复此过程.(即所见即所得的编程)
说人话就是: Scala提供了Scala REPL,在我不确定一个算子的功能时,我可以很快打开REPL进行验证,并直观得到答案。
REPL 的特性:
变量会在会话周期内一直可用
多行代码和单行代码一起编译
支持链接外部的数据库和代码
REPL 历史命令会跨会话存储
我们直接在黑窗口CMD 输入 scala 就可以启动 Scala 并且进入到 REPL 中了
:help 查看我们可以使用到的常用命令,因为命令后面都带了解释就不一一解释了,简单的英文自己不懂得可以翻译哈!
REPL 自动分配变量名: 如果我们在 REPL 当中没有定义变量名,那么我们的变量名系统会自动给定
注意: Scala 当中的变量类型可以不用指定,系统会自动推断,为了减少可变性引起的 bug, Scala 当中推荐尽量使用不可变类型来声明变量. Var 和 Val 申明变量的时候,变量都必须初始化.
在 Scala 中我们的输出打印只需要 ,相比java 的而言是简短很多很多的.
println()
以上就是我们简单的 REPL 的 案例:就是所见即所得,这里可能还是很难理解,因为正常我们是不会再这个小黑窗口进行开发的,所以稍后我们将进入到 开发工具中去进一步的探索
4. 创建 支持 scala 的 maven工程代码开发
File ==> New ==> Project
注意:我们是要先把 scala 中的 scala maven jar 包依赖写好了,才可以在我们的 new 的时候, 才可以用到 Create New Scala Class .如果不导入依赖,那么就没有这个选项的,它只有新建 Java 对象.
```
<artifactId>Scala1</artifactId>
<groupId>asjdfas</groupId>
<artifactId>Scala</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module></module>
</modules>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.8</version>
<!-- 如果想要用java -jar 来运行我们打包之后的jar包,则下面这个配置必须注释掉 -->
<!-- <scope>provided</scope>-->
</dependency>
</dependencies>
<build>
<plugins>
<!-- 限制jdk版本插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 编译scala需要用到的插件 -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 项目打包用到的插件 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>cn.itcast.scala.demo1.ScalaFirst</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
```