大数据技术——Scala语言基础

2023-10-27

Scala语言概述

计算机的缘起

  • 数学家阿隆佐·邱奇(Alonzo Church)设计了“入演算”,这是一套用于研究函数定义、函数应用和递归的形式系统

  • 入演算被视为最小的通用程序设计语言

  • 入演算的通用性就体现在,任何一个可计算函数都能用这种形式来表达和求值

  • 入演算是一个数理逻辑形式系统,强调的是变换规则的运用,而非实现它们的具体机器

·冯·诺依曼(John Von Neumann)将图灵的理论物化成为实际的物理实体,成为了计算机体系结构的奠基者

·1945年6月,冯·诺依曼提出了在数字计算机内部的存储器中存放程序的概念,这是所有现代计算机的范式,被称为“冯·诺依曼结构”

编程范式

  • 编程范式是指计算机编程的基本风格或典范模式。常见的编程范式主要包括命令式编程和函数式编程。面向对象编程就属于命令式编程,比如C++、Java等

  • 命令式语言是植根于冯·诺依曼体系的,一个命令式程序就是一个冯`诺依曼机的指令序列,给机器提供一条又一条的命令序列让其原封不动地执行

  • 函数式编程,又称泛函编程,它将计算机的计算视为数学上的函数计算

  • 函数编程语言最重要的基础是入演算。典型的函数式语言包括Haskell、Erlang和Lisp等

·一个很自然的问题是,既然已经有了命令式编程,为什么还需要函数式编程呢?

·为什么在C++、Java等命令式编程流行了很多年以后,近些年函数式编程会迅速升温呢?

·命令式编程涉及多线程之间的状态共享,需要锁机制实现并发控制

·函数式编程不会在多个线程之间共享状态,不需要用锁机制,可以更好并行处理,充分利用多核CPU并行处理能力

Scala简介

  1. Scala是一门类Java的多范式语言,它整合了面向对象编程和函数式编程的最佳特性。

  1. Scala运行于Java虚拟机(JVM)之上,并且兼容现有的Java程序

  1. Scala是一门纯粹的面向对象的语言

  1. Scala也是一门函数式语言

Scala安装

(1) Linux系统的安装

Scala运行在Java虚拟机(JVM)之上,因此只要安装有相应的Java虚拟机,所有的操作系统都可以运行Scala程序,包括Window、Linux、Unix、MacoS等。

(2)在Linux系统中安装Java

检验一下是否设置正确

如果设置正确的话,$JAVA_HOME/bin/java -version会输出java的版本信息,且和 java -version的输出结果一样

(3)安装Scala

本教程使用的Spark版本是2.1.0,其对应的Scala版本是2.11.8

登录Scala官网,下载scala-2.11.8.tgz

Hello World测试

(1)通过HelloWorld程序了解Scala解释器的使用方法

在Shell命令提示符界面中输入“scala"命令后,会进入scala命令行提示符状态:

(2)在Scala解释器中运行脚本文件

用“:load”命令导入脚本,一次运行多行程序:

使用文本编辑器(比如vim)创建一个代码文件Test.scala

(3) 通过编译打包的方式运行Scala程序

Scala基础知识

基本数据类型和变量

基本数据类型

Scala的数据类型包括:Byte、Char、, Short、Int、Long、Float、Double和Boolean(注意首字母大写)

和Java不同的是,在Scala中,这些类型都是“类”,并且都是包scala的成员,比如,Int的全名是scala.Int。对于字符串,Scala用java.lang.String类来表示字符串

字面量
操作符

操作符优先级:算术运算符>关系运算符>逻辑运算符>赋值运算符

在Scala中,操作符就是方法例如,5+3和(5).+(3)是等价的

富包装类
  • 对于基本数据类型,除了以上提到的各种操作符外,Scala还提供了许多常用运算的方法,只是这些方法不是在基本类里面定义,而是被封装到一个对应的富包装类中

  • 每个基本类型都有一个对应的富包装类,例如Int有一个RichInt类、String有一个RichString类,这些类位于包scala.runtime

  • 当对一个基本数据类型的对象调用其富包装类提供的方法,Scala会自动通过隐式转换将该对象转换为对应的富包装类型,然后再调用相应的方法。例如:3 max 5

变量

Scala有两种类型的变量:

val:是不可变的,在声明时就必须被初始化,而且初始化以后就不能再赋值

var:是可变的,声明的时候需要进行初始化,初始化以后还可以再次对其赋值

基本语法:

val变量名:数据类型=初始值

var 变量名:数据类型=初始值

类型推断机制(type inference):

根据初始值自动推断变量的类型,使得定义变量时可以省略具体的数据类型及其前面的冒号

var变量初始化以后,可以再次赋值

注意:在REPL环境下,可以重复使用同一个变量名来定义变量,而且变量前的修饰符和其类型都可以不一致,REPL会以最新的一个定义为准

输入和输出

控制台输入输出语句

从控制台读入数据方法: readInt、readDouble、readByte、readShort、readFloat、readLong、readChar、readBoolean及readLine,分别对应9种基本数据类型,其中前8种方法没有参数,readLine可以不提供参数,也可以带一个字符串参数的提示

所有这些函数都属于对象scala.io.StdIn的方法,使用前必须导入,或者直接用全称进行调用

从控制台读入数据方法

向控制台输出信息方法:

print()和println(),可以直接输出字符串或者其它数据类型,其中println在末尾自动换行。

C语言风格格式化字符串的printf()函数

print()、println()和printf()都在对象Predef中定义,该对象默认情况下被所有Scala程序引用,因此可以直接使用Predef对象提供的方法,而无需使用scala.Predef.的形式。

s字符串和f字符串:

Scala提供的字符串插值机制,以方便在字符串字面量中直接嵌入变量的值。

基本语法:s " ...$变量名...”f "...$变量名%格式化字符..."

读写文件
  • 写入文件

Scala需要使用java.io.PrintWriter实现把数据写入到文件,PrintWriter类提供了print和println两个写方法

  • 读取文件

可以使用scala.io.Source的getLines方法实现对文件中所有行的读取

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据技术——Scala语言基础 的相关文章

  • Retrofit请求数据对错误以及网络异常的处理

    异常处理 Retrofit本身会抛出HttpException Gson解析会抛出解析异常 此外我们还应该处理与服务器约定好的 异常 即上一篇提到的返回数据中result字段值不会0的情况 这里要先解决一个问题 就是Gson构建的对象 通过
  • Py区块链源码笔记 (1)挖矿

    昨晚听大佬小课堂 给我普及一晚上区块链相关各种知识 深深感觉到自己宛如一个智障 我不配说自己是学计算机的啊 膜拜之余 转载大佬的文章 像大佬学习 文章出处 Py区块链源码笔记 1 挖矿 也欢迎看到人的去访问他博客 Py区块链源码笔记 1 挖

随机推荐

  • 7-39 jmu-python-逆序输出 (5 分)

    7 39 jmu python 逆序输出 5 分 输入一行字符串 然后对其进行如下处理 输入格式 字符串中的元素以空格或者多个空格分隔 输出格式 逆序输出字符串中的所有元素 然后输出原列表 然后逆序输出原列表每个元素 中间以1个空格分隔 注
  • 【linux】——文件系统

    目录 什么是inode 目录 硬链接 软链接 什么是inode 当我们创建一个文件时 我们不对文件中写入任何内容 请问该文件是否占磁盘空间 答案是肯定的 因为文件中的属性信息也占了磁盘空间 首先我们得认清一个概念 文件构成 文件属性信息 文
  • 论文精读及分析:Deep Multi-Modal Object Detection and Semantic Segmentation for Autonomous Driving

    本文主要内容为论文 Deep Multi Modal Object Detection and Semantic Segmentation for Autonomous Driving Datasets Methods and challe
  • 【CV】第 6 章:图像分类的实际方面

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • nodejieba安装记(Windows)

    导语 最近想分析一下自己在学校论坛bt的下载行为 又想耍帅 所以准备整个词云 而词云的数据来源必然是下载种子的名称 类型等 所以不可避免要针对所有下载种子做关键词检索 因此需要用到中文分词工具 因为我利用nodejs 所以在网上查找了很多资
  • 阿里云轻量级应用服务器如何使用?

    阿里云轻量级应用服务器如何使用 一直听朋友说 可以在阿里云上付费购买一个自己的服务器 然后搭建部署自己的小应用 因为是云服务器 所以可以轻轻一个连接访问自己发布的应用 可以说是很棒棒了 那么如何使用已经申请好的阿里云服务器呢 主要步骤如下
  • 毕业设计--------登录鉴权

    前言 提示 这里只是记录一下自己做毕业设计的思路 前端采用vue 后端用springCloud 一 拦截器 Configuration public class InterceptorConfig extends WebMvcConfigu
  • android button setMinHeight setMinWidth 无效解决办法

    setMinWidth 0 setMinHeight 0 setMinimumWidth 0 必须同时设置这个setMinimumHeight 0 必须同时设置这个两个方法同时设置才能生效 转载于 https www cnblogs com
  • 人体骨骼关键点检测的初尝试

    关于人体骨骼关键点模型的介绍 请见上一篇博客 PaddleHub人体姿态检测模型pose resnet50 mpii 由于群友讨论到舞蹈视频 所以想了下 可以用这个搞事情 来个荧光棒舞怎么样 于是我打算拿寡姐来试试 使用关键点检测后 看来检
  • PAT乙级 1110 区块反转 (25 分) C++

    1110 区块反转 25 分 给定一个单链表 L 我们将每 K 个结点看成一个区块 链表最后若不足 K 个结点 也看成一个区块 请编写程序将 L 中所有区块的链接反转 例如 给定 L 为 1 2 3 4 5 6 7 8 K 为 3 则输出应
  • 【LLVM】Llvm 源码编译安装

    目录 概述 搭建CMake环境 搭建SVN环境 搭建Llvm环境 一 下载Llvm源码 二 下载Clang项目 三 下载 Compiler RT 四 下载测试部分代码 可选 并且比较大 五 离线下载相关包 可选 六 创建build文件夹编译
  • ubuntu18.04卡在“【ok】Starting Gnome Display Manager“问题处理

    ubuntu18 04卡在 ok Starting Gnome Display Manager 问题处理 目录标题 ubuntu18 04卡在 ok Starting Gnome Display Manager 问题处理 处理 处理 原因
  • 手写浅拷贝和深拷贝

    浅拷贝 浅拷贝是指 一个新的对象对原始对象的属性值进行精确地拷贝 如果拷贝的是基本数据类型 拷贝的就是基本数据类型的值 如果是引用数据类型 拷贝的就是内存地址 如果其中一个对象的引用内存地址发生改变 另一个对象也会发生变化 Object a
  • letcode算法题集锦

    day01 letcode9 买卖股票的最佳时机 给定一个数组 prices 它的第 i 个元素 prices i 表示一支给定股票第 i 天的价格 你只能选择 某一天 买入这只股票 并选择在 未来的某一个不同的日子 卖出该股票 设计一个算
  • ec服务器如何显示4d,ECToolbox软件四种公式在心肌灌注显像中计算左心室射血分数的应用...

    摘要 目的 比较ECToolbox 4种公式 R 0 R 1 R 2 R 3 计算心电图门控心肌灌注显像 ECG gated myocardial perfusion SPECT GMPS 左心室射血分数与平衡法心血池显像 equilibr
  • el-input (输入框)校验 只能输入数字和小数

    备注 我写的是判断输入的是否数字或小数 如果只需判断是否是数字可直接复制elementui官网上的案例即可 1 一定要写 prop aa 不然是没效果的 2 仿照elementui官网 绑定rules 3 写校验 tirgger chang
  • gcj Round 1- A -B题

    输入 E R N v1 v2 vn 有n个工作 没做一个消耗一定的能量 但可以得到R个能量 最多为E 多则去除 初始能量是E 每件工作的收益是 v i u i u i 做i使用的能量 u i gt 0 u i lt E 解 如果规定u i
  • VUE layui之table数据表格使用详细说明

    步骤 一 layui官网下载包 二 将解压的文件放入static文件夹 如果没有就在根目录下新建一个 三 public文件下index html中引入css及js文件 这里注意顺序和你下载的版本号 四 vue页面中使用
  • java3D 第三章 java3D基本图形类详解

    第三章 java 3D基本图形功能 java 3D基本图形功能 java 3D场景式管理 SimpleUniverse类及其方法 ViewingPlatform类及方法 包的关系 Shape3D类及方法 Appearance类及方法 Bra
  • 大数据技术——Scala语言基础

    Scala语言概述 计算机的缘起 数学家阿隆佐 邱奇 Alonzo Church 设计了 入演算 这是一套用于研究函数定义 函数应用和递归的形式系统 入演算被视为最小的通用程序设计语言 入演算的通用性就体现在 任何一个可计算函数都能用这种形