1. Scala语言概述

1.1 计算机的起源

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

阿兰图灵提出图灵机。

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

图1 冯诺依曼体系结构

1.2 编程范式

图2 两大编程范式

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

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

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. 函数式编程基础

Spark编程基础-(二)Scala语言基础相关推荐

  1. Spark快速大数据分析——Scala语言基础(壹)

    Spark快速大数据分析--Scala语言基础(壹) 文章目录 Spark快速大数据分析--Scala语言基础(壹) 前记 Scala的历史 环境搭建: 1.SBT构建工具和REPL: 2.使用IDE ...

  2. python语言基础实验_实验二Python语言基础函数包练习.doc

    实验二Python语言基础函数包练习 实验 Python语言基础函数包练习:1208 学号: 实验目的 1.Python语言包,如math.NumPySciPy和Matplotlib等函数包的使用实验 ...

  3. 编程之基 --- C语言基础大全 III

      BACK:编程之基 --- C语言基础大全 II   流程一览 Eighth Week 数组 1. 数组 2. 数组运算 2.1 素数 2.2 二维数组 Ninth Week 指针 1. 指针 2 ...

  4. matlab语言实验二,实验二 MATLAB语言基础

    实验二 MATLAB 语言基础 一.实验目的 基本掌握 MATLAB 向量.矩阵.数组的生成及其基本运算(区分数组运算和矩阵运算).常用的数学函数.了解字符串的操作. 二.实验内容 (1) 向量的生成 ...

  5. 编程之基 --- C语言基础大全 IV

      BACK:编程之基 --- C语言基础大全 III   流程一览 Tenth Week 字符串 1. 字符串 2. 字符串函数 Eleventh Week 结构类型 1. 枚举 2. 结构 3. ...

  6. 20165302 学习基础和C语言基础调查

    学习基础和C语言基础调查 ====== 一,技能学习经验体会 要问我有什么技能比大多数人强,这个我还真的不敢说,虽然我在很多方面都有自己的一些了解,比如乐器和绘画,但也都是一知半解,并没有在某一方面出 ...

  7. 随机函数c语言对打,20165323 学习基础和C语言基础调查

    20165323 学习基础和C语言基础调查 一.技能学习心得 1.你有什么技能比大多人更好? 我觉得我羽毛球打的还行,不能说打得比大多数人好,但是对于一些打羽毛球的要领还是掌握的. 2.针对这个技能的 ...

  8. 20165326 学习基础和c语言基础调查

    学习基础和c语言基础调查 一.关于个人技能 阅读了娄老师关于做中学的文章,我想起了自己之前学习技能的经历. 从小到大我学过的东西不少,除学校的教育课程外,我还参加过各种兴趣班,书法.绘画.舞蹈.吉他. ...

  9. 如何学习java c语言_20165237 学习基础和C语言基础调查

    学习基础和C语言基础调查 一.技能学习与特长 你有什么技能比大多人(超过90%以上)更好? 我的爱好和技能说实话挺广泛的.如果要挑出来一个很擅长的话,我觉得应该是钢琴. 针对这个技能的获取你有什么成功 ...

  10. 20165103学习基础和C语言基础调查

    20165103学习基础和C语言基础调查 学习基础和C语言基础调查 技能及其学习经验 在阅读老师做中学系列文章的时候,读到了一句话: 开发极点起因主要是个人兴趣爱好和工作需要. -- 引用自<做 ...

最新文章

  1. Redis宕机了怎么办?
  2. python列表操作函数大全_Python列表操作函数
  3. docker报错解决办法:Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp
  4. 最后一块石头的重量II
  5. error:use of undeclared identifier
  6. vue表单的基本使用
  7. java 负载均衡_java负载均衡 - 岁月静好I的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. ROS launch文档介绍
  9. c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...
  10. 用MediaPlayer record audio简例
  11. 【渝粤教育】国家开放大学2018年秋季 0195-22T机械设计基础 参考试题
  12. 基于AT89C51的多层电梯控制系统
  13. notepadpython插件_Notepad Python
  14. CIO40:IT人22-30岁职业规划
  15. 三国管理智慧之刘备的管理之道
  16. 微信公众号生成临时二维码
  17. mac 连接linux sh,ssh工具 – windows和mac 上ssh连接linux 服务器工具推荐 – The Hu Post...
  18. 医疗管理系统-检查组管理
  19. 床帘机器人_“拉窗帘”机器人惊现中国,而未来中国机器人的发展,绝不止这些...
  20. 蓝牙耳机南卡和苹果哪个好用?南卡耳机和苹果耳机深度体验报告

热门文章

  1. Win10家庭版升级到企业版的方法
  2. 人工智能发展史论文_有史以来15篇最佳AI研究论文
  3. excel怎样修改表格时间和计算机一制,修改Excel如何显示修改时间/修改日期怎么改excle...
  4. 职称计算机excel考前,2020年职称计算机考试EXCEL考前预测试题4
  5. 关于oracle数据库的卸载与重新安装
  6. 加ing形式的单词有哪些_英语中,后加动词的ing形式的词有哪?
  7. 100以内加减法混合出题 进位加法 退位减法
  8. 2022年全球与中国线性限位开关市场现状及未来发展趋势
  9. 企业如何提升网站平台的安全防护?
  10. (三)springcloud 消息总线-spring cloud bus