Spark编程基础-(二)Scala语言基础

1. Scala语言概述

1.1 计算机的起源

阿隆佐\cdot邱奇设计了\lambda演算的系统,形式系统。

阿兰\cdot图灵提出图灵机。

\cdot诺依曼是计算机体系结构的奠基者。1945年提出计算机体系结构。

图1 冯诺依曼体系结构

1.2 编程范式

图2 两大编程范式

命令式语言完全根植于冯诺依曼体系结构的。

函数式编程(或者称为泛函编程)将计算机中的计算看成是数学上的函数计算。源于\lambda演算。

Scala也融合了函数式编程的风格。

在大数据时代,我们要实现的是并行计算。命令式编程中,线程之间会共享一些变量,为了保持变量的一致性,通常采用加锁机制,但是一旦某个线程加锁,其它的线程就只能等待,这不能充分发挥多核CPU的优势。

而在函数式编程中,一般是一旦设定了变量的值,后面就不允许再更改。由于不存在值的更改,也就不需要并发控制,因而可以进行并行处理。

Erlang语言在电信行业使用频度非常高。

由于Spark是由Scala编写,因而Spark可以充分利用多核CPU的多线程并发能力。

1.3 Scala简介

Scala语言是一门类似Java的多范式语言,类似于Java,并且其本身就是在Java基础上发展起来的。

Scala之父是Martin Odersky,javac就是他开发的。

Scala是一种混合式的编程范式,既包含面向对象编程风格,也包含函数式编程风格。

1.3.1 Scala的特点

(1)兼容现有的所有Java程序

Scala运行在Java虚拟机(JVM)之上的,可以兼容现有的所有Java程序。即,可以将Java类import到Scala中,并通过类调用其方法。

图3 Scala与Java兼容

正因为Scala和Java完全兼容,因而Scala能和Hadoop系统能够实现融合。

图4 Scala能够和Hadoop融合

(2)Scala是一门纯粹的面向对象语言

也就是Scala中的每一个值都是一个对象。例如下图,在执行“3+5”时,其实是执行“3”的对象方法“.()”,并传入的对象“5”。

图5 Scala是纯粹的面向对象的编程语言

(3)也是一门函数式语言

图6 Scala为函数式语言

1.4 Scala的安装

大数据的大部分编程是在Linux环境下,这里只介绍在Linux系统下的安装。

1.4.1 这里介绍2种安装JVM方法

(1)使用OpenJDK直接进行安装

注意Spark、Scala和Java的版本。例如,(Spark 2.1.0) + (Scala 2.11.8) + (Java 7以上)。

(a) JDK安装

# JDK的安装
sudo apt-get install openjdk-7-jre openjdk-7-jdk

(b)环境变量的配置

vim ~/.bashrc
图7 bashrc内容 

将第一行改为实际安装路径。

(c)使配置立即生效

source ~/.bashrc #使变量设置生效

(2) 使用命令安装default-jdk

(a)命令安装

sudo apt-get install default-jre default-jdk

(b)配置环境变量JAVA_HOME

步骤同上

(c)使配置生效

同上

(3) 检测Java环境是否安装成功

java -version

1.4.2 Scala的安装

首先到(https://sdkman.io/install)按照步骤安装skdman。

然后,执行

sdk install scala

这样,我们就可以启动scala解释器。

Scala通常是交互式的执行环境,称为REPL(Read-Eval-Print-Loop)。

1.5 HelloWorld

可以通过不同的方式编写HelloWorld程序。

1.5.1 交互式方法(Scala解释器)

(1)直接在交互式环境中编写代码

退出交互式Scala解释器:

(2)运行脚本文件

假设事先已经建好了代码文件,“Test.scala”

在Scala REPL中执行如下命令运行改代码文件:

:load 后面是全路径

然后显示“Loading...”

然后是代码文件中的输出内容。

1.5.2 通过编译打包的方式运行Scala程序

如果代码文件中定义了对象,就需要通过编译去执行。

例如,下图定义了单例对象

-什么是单例对象?(后面的内容会讲的更详细)

-定义在单例对象中所有的方法都是静态方法。就是不需要实例化就可以执行。

使用scalac命令进行编译(编译的结果为Java字节码)

使用scala命令运行字节码文件

-classpath:指scalac生成的“.class”文件位置,即告诉scala到什么位置找“.class”文件。

上行命令表示“.class”就在当前目录下。

由于Scala与Java是完全兼容的,因此scalac生成的字节码文件可以完全由Java执行。

使用java命令运行字节码文件:

“:”是把两个路径组合在一起。

由于字节码是由scalac生成的,此时又是由java执行字节码文件,因此需要依赖scala的包才能得到正确的结果。

2. Scala基础知识

2.1 基本数据类型和变量

2.1.1 基本数据类型

Scala的基本数据类型和Java的基本数据类型类似。

图7 基本数据类型

以上的这些数据类型都是类,例如

但是String是一个特例,它是直接使用Java里面的String,也就是使用

java.lang.String

来表示字符串。

图8 每一个数据类型的取值范围

2.1.2 字面量(Literal)

下面给出一些例子,

2.1.3 操作符

图9 操作符

操作符的优先级:

图10 操作符的优先级

2.1.4 操作符定义成方法

每一个操作符其实是调用了其方法,例如

2.1.5 富包装类

例如,下图的Int类中只有基本的操作,如果我们要进行“max”的操作,Int对象就会被隐式地、自动地转换成富包装类对象。

图11 基本类型和富包装类

2.1.6 变量

Scala里包含两种变量(不可变和可变变量)

两种变量的声明:

Scala有类型自动推断机制,所以不需要每次声明变量时,显式声明其类型。

下面的例子是对不可变变量进行重新赋值,系统报错!

另外,在同一个执行环境中,可以不断地重复使用同一个变量名,系统会记住最后一次定义的那个变量类型。

2.2 输入输出

(下文待续。。。)

 

 

 

 

函数的字面量

 

 

2.3 控制结构

 

 

 

2.4 数据结构

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 面向对象编程基础

 

 

 

 

4. 函数式编程基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值