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. python预处理删除特殊字符_python - 如何删除包含特殊字符的字符串?_others_酷徒编程知识库...
  2. linux下ping不通问题的说明与解决(DNS配置丢失)
  3. MAC Opencv include选择
  4. 残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉
  5. CentOS 7系统上部署Apache+PHP+MariaDB+xcache使用rpm,php module
  6. 统计学硕士考计算机博士,统计学国家重点学科博士点硕士点最全博研堂考研究生.pdf...
  7. 小团队项目管理开源工具_超越指标:如何在当今的开源项目中以团队方式运作
  8. html居中代码logo,关于logo(前端开发教程)垂直居中的问题
  9. java主类调用数组_用java编写在主函数中调用数组
  10. SAP License:一个 SAP 新手的困惑
  11. pom文件配置多个远程仓库地址_分布式配置中心Config
  12. Win11任务栏不重叠怎么设置,Win11任务栏不重叠设置方法
  13. 【C#】图片处理(底片,黑白,锐化,柔化,浮雕,雾化)
  14. CPU 100% 异常排查实践与总结
  15. (丝滑版)Python使用Opencv画一个哆啦A梦(动态),并制作成可执行文件.exe
  16. 计算机软件著作权登记证书
  17. Win11dns解析状态异常怎么处理?Win11dns解析失败解决方法
  18. 物联网应用案例:镇海智慧水务
  19. 【PM学习笔记】酸梅干超人 - 零基础学Figma学习笔记
  20. word文档乱码了怎么办

热门文章

  1. mysql如何截取字符串中前面的数字_sql如何截取字符串中前面的数字
  2. 【嵌入式·单片机】老生常谈:学习单片机和嵌入式是否需要学习算法?
  3. 五年级上册计算机教学工作计划,人教版五年级上册数学教学工作计划
  4. [原创]地雷词-一不小心说错话,你就……
  5. codevs 数独系列 题解报告
  6. 前端团队协同工作,如何保证质量
  7. java 幻灯片_Java 打印PPT幻灯片
  8. Pixplant3 下载及使用
  9. [备忘]Word实现公式居中/左对齐、编号右对齐
  10. Nvme固体硬盘Intel750,SM961分别使用一段时间以后对比