Spark编程基础-(二)Scala语言基础
1. Scala语言概述
1.1 计算机的起源
阿隆佐邱奇设计了
演算的系统,形式系统。
阿兰图灵提出图灵机。
冯诺依曼是计算机体系结构的奠基者。1945年提出计算机体系结构。
![](/assets/blank.gif)
1.2 编程范式
![](/assets/blank.gif)
命令式语言完全根植于冯诺依曼体系结构的。
函数式编程(或者称为泛函编程)将计算机中的计算看成是数学上的函数计算。源于演算。
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中,并通过类调用其方法。
![](/assets/blank.gif)
正因为Scala和Java完全兼容,因而Scala能和Hadoop系统能够实现融合。
![](/assets/blank.gif)
(2)Scala是一门纯粹的面向对象语言
也就是Scala中的每一个值都是一个对象。例如下图,在执行“3+5”时,其实是执行“3”的对象方法“.()”,并传入的对象“5”。
![](/assets/blank.gif)
(3)也是一门函数式语言
![](/assets/blank.gif)
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
![](/assets/blank.gif)
将第一行改为实际安装路径。
(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的基本数据类型类似。
![](/assets/blank.gif)
以上的这些数据类型都是类,例如
但是String是一个特例,它是直接使用Java里面的String,也就是使用
java.lang.String
来表示字符串。
![](/assets/blank.gif)
2.1.2 字面量(Literal)
下面给出一些例子,
2.1.3 操作符
![](/assets/blank.gif)
操作符的优先级:
![](/assets/blank.gif)
2.1.4 操作符定义成方法
每一个操作符其实是调用了其方法,例如
2.1.5 富包装类
例如,下图的Int类中只有基本的操作,如果我们要进行“max”的操作,Int对象就会被隐式地、自动地转换成富包装类对象。
![](/assets/blank.gif)
2.1.6 变量
Scala里包含两种变量(不可变和可变变量)
两种变量的声明:
Scala有类型自动推断机制,所以不需要每次声明变量时,显式声明其类型。
下面的例子是对不可变变量进行重新赋值,系统报错!
另外,在同一个执行环境中,可以不断地重复使用同一个变量名,系统会记住最后一次定义的那个变量类型。
2.2 输入输出
(下文待续。。。)
函数的字面量
2.3 控制结构
2.4 数据结构
3. 面向对象编程基础
4. 函数式编程基础
Spark编程基础-(二)Scala语言基础相关推荐
- Spark快速大数据分析——Scala语言基础(壹)
Spark快速大数据分析--Scala语言基础(壹) 文章目录 Spark快速大数据分析--Scala语言基础(壹) 前记 Scala的历史 环境搭建: 1.SBT构建工具和REPL: 2.使用IDE ...
- python语言基础实验_实验二Python语言基础函数包练习.doc
实验二Python语言基础函数包练习 实验 Python语言基础函数包练习:1208 学号: 实验目的 1.Python语言包,如math.NumPySciPy和Matplotlib等函数包的使用实验 ...
- 编程之基 --- C语言基础大全 III
BACK:编程之基 --- C语言基础大全 II 流程一览 Eighth Week 数组 1. 数组 2. 数组运算 2.1 素数 2.2 二维数组 Ninth Week 指针 1. 指针 2 ...
- matlab语言实验二,实验二 MATLAB语言基础
实验二 MATLAB 语言基础 一.实验目的 基本掌握 MATLAB 向量.矩阵.数组的生成及其基本运算(区分数组运算和矩阵运算).常用的数学函数.了解字符串的操作. 二.实验内容 (1) 向量的生成 ...
- 编程之基 --- C语言基础大全 IV
BACK:编程之基 --- C语言基础大全 III 流程一览 Tenth Week 字符串 1. 字符串 2. 字符串函数 Eleventh Week 结构类型 1. 枚举 2. 结构 3. ...
- 20165302 学习基础和C语言基础调查
学习基础和C语言基础调查 ====== 一,技能学习经验体会 要问我有什么技能比大多数人强,这个我还真的不敢说,虽然我在很多方面都有自己的一些了解,比如乐器和绘画,但也都是一知半解,并没有在某一方面出 ...
- 随机函数c语言对打,20165323 学习基础和C语言基础调查
20165323 学习基础和C语言基础调查 一.技能学习心得 1.你有什么技能比大多人更好? 我觉得我羽毛球打的还行,不能说打得比大多数人好,但是对于一些打羽毛球的要领还是掌握的. 2.针对这个技能的 ...
- 20165326 学习基础和c语言基础调查
学习基础和c语言基础调查 一.关于个人技能 阅读了娄老师关于做中学的文章,我想起了自己之前学习技能的经历. 从小到大我学过的东西不少,除学校的教育课程外,我还参加过各种兴趣班,书法.绘画.舞蹈.吉他. ...
- 如何学习java c语言_20165237 学习基础和C语言基础调查
学习基础和C语言基础调查 一.技能学习与特长 你有什么技能比大多人(超过90%以上)更好? 我的爱好和技能说实话挺广泛的.如果要挑出来一个很擅长的话,我觉得应该是钢琴. 针对这个技能的获取你有什么成功 ...
- 20165103学习基础和C语言基础调查
20165103学习基础和C语言基础调查 学习基础和C语言基础调查 技能及其学习经验 在阅读老师做中学系列文章的时候,读到了一句话: 开发极点起因主要是个人兴趣爱好和工作需要. -- 引用自<做 ...
最新文章
- Redis宕机了怎么办?
- python列表操作函数大全_Python列表操作函数
- docker报错解决办法:Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp
- 最后一块石头的重量II
- error:use of undeclared identifier
- vue表单的基本使用
- java 负载均衡_java负载均衡 - 岁月静好I的个人空间 - OSCHINA - 中文开源技术交流社区...
- ROS launch文档介绍
- c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...
- 用MediaPlayer record audio简例
- 【渝粤教育】国家开放大学2018年秋季 0195-22T机械设计基础 参考试题
- 基于AT89C51的多层电梯控制系统
- notepadpython插件_Notepad Python
- CIO40:IT人22-30岁职业规划
- 三国管理智慧之刘备的管理之道
- 微信公众号生成临时二维码
- mac 连接linux sh,ssh工具 – windows和mac 上ssh连接linux 服务器工具推荐 – The Hu Post...
- 医疗管理系统-检查组管理
- 床帘机器人_“拉窗帘”机器人惊现中国,而未来中国机器人的发展,绝不止这些...
- 蓝牙耳机南卡和苹果哪个好用?南卡耳机和苹果耳机深度体验报告
热门文章
- Win10家庭版升级到企业版的方法
- 人工智能发展史论文_有史以来15篇最佳AI研究论文
- excel怎样修改表格时间和计算机一制,修改Excel如何显示修改时间/修改日期怎么改excle...
- 职称计算机excel考前,2020年职称计算机考试EXCEL考前预测试题4
- 关于oracle数据库的卸载与重新安装
- 加ing形式的单词有哪些_英语中,后加动词的ing形式的词有哪?
- 100以内加减法混合出题 进位加法 退位减法
- 2022年全球与中国线性限位开关市场现状及未来发展趋势
- 企业如何提升网站平台的安全防护?
- (三)springcloud 消息总线-spring cloud bus