还没关注?

快动动手指!

前言

在春节期间,欢天喜地的办理了自己的婚礼,导致春节前后的一段时间都比较忙碌,进而使自己原创文章的脚步放慢了很多。许多朋友在微信公众号后台留言,表示想看大数据相关的文章。那么,我们就接着《大数据之脚踏实地学11--Spark神器的安装》一文,开始Scala编程语言的学习。

纲要

本文所涉及的所有代码都可以正常运行,读者可以直接Copy文内的代码进行测试。本文的主要内容包括:

1)变量的定义

2)数据的基本类型

3)数据类型的转换

4)Scala中常用的运算符

知识点讲解

变量定义
  • val:定义一个字面量,即不可变的常量。

  • var:定义一个变量,值是可以变换的。

用法:

val variable_name = initial_value

val variable_name:datatype = initial_value

举例

// 定义val变量scala> val name = "刘顺祥"name: String = 刘顺祥scala> name = "xuxin"  // 不可以重新赋值:12: error: reassignment to val       name = "xuxin"            ^// 定义var变量scala> var age:Int = 30age: Int = 30scala> age = 28  // var定义的变量,可以重新赋值age: Int = 28// 多个变量赋予同一个数值val x1,x2 : Int = 10

数据类型一览表

数据类型的描述

数据类型 数据描述
Byte 小整型,区间为 -128 到 127
Short 短整型,区间为 -32768 到 32767
Int 整型,区间为 -2147483648 到 2147483647
Long 长整型,区间为 -9223372036854775808 到 9223372036854775807
Float 单精度浮点型,默认保留7位有效数字
Double 双精度浮点型
Char 字符型,用一对单引号表示
String 字符串型,用一对双引号表示
Boolean 布尔型,两种值为true和false
Unit 不返回任何结果的类型,其对应的实例仅为()
Null 空值,其对应的实例为null
Nothing 底层类,即所有类型的子类型
Any 顶层类,即所有类型的父类型
AnyVal 顶层类,所有值类型的父类
AnyRef 顶层类,所有引用类(如scala类,Java类等)的父类

举例

scala> val mybyte : Byte = 124mybyte: Byte = 124scala> val mybyte2 : Byte = 321  // 超过Byte的数值范围,会报错:11: error: type mismatch; found   : Int(321) required: Byteval mybyte2 : Byte = 321  // 超过Byte的数值范围,会报错                            ^scala> val myInt : Int = 1234567 // 对于一个整数,默认为Int型myInt: Int = 1234567scala> val myLong : Long = 12345678910L // 必须在整数的末尾加上字母l或L,否则溢出myLong: Long = 12345678910scala> val myDouble : Double = 3.14159 // 对于一个实数,默认为双精度浮点型myDouble: Double = 3.14159scala> val myFloat : Float = 3.14159f // 必须在实数的末尾加上字母f或FmyFloat: Float = 3.14159scala> val myChar : Char = 'A'myChar: Char = Ascala> val myString : String = "今天天气很好!"myString: String = 今天天气很好!scala> val myBoolean : Boolean = truemyBoolean: Boolean = true
类型之间的转换
  • 隐式转换

该转换是指数据从低精度往高精度转换的过程,通常在做数学运算时便可以实现转换(前提是一定可以转)。如数据类型一览图中的虚线指向。

举例

scala> val x1 : Byte = 123x1: Byte = 123scala> x1 + 100  // Byte + Int 会自动升级为Intres0: Int = 223scala> val x2 : Int = 10000x2: Int = 10000scala> x2 + 1111.1  // Int + Double 会自动升级为Doubleres1: Double = 11111.1scala> val x3 : Char = 'A'x3: Char = Ascala> x3 + 1  // Char + Int 会自动升级为Intres2: Int = 66scala> val x4 : Short = x1 + 100   // Int + Int 无法降级到Short,故报错:12: error: type mismatch; found   : Int required: Shortval x4 : Short = x1 + 100   // Int + Int 无法降级到Short,故报错
  • 强制转换

强制转换则是指在无法隐式转换的情况下,借助于对象的“方法”将其强制转换。

举例

scala> val x4 : Short = (x1 + 100).toShort  // toShort方法强制转换为Short类型x4: Short = 223scala> (x3 + 1).toChar  // 将Int型的66强制转换为Char类型res3: Char = Bscala> (23.5/5).toInt  // 将Double类型强制转换为Int类型res5: Int = 4
Scala中的运算符
  • 比较运算符

通过比较运算符,可以得到Boolean类型的值。

运算符 含义
> 判断运算符左侧的值是否大于右侧的值
>= 判断运算符左侧的值是否大于等于右侧的值
< 判断运算符左侧的值是否小于右侧的值
<= 判断运算符左侧的值是否小于等于右侧的值
== 判断运算符左侧的值是否等于右侧的值
!= 判断运算符左侧的值是否不等于右侧的值
  • 逻辑运算符

借助于逻辑运算符,将多个比较运算符进行连接。

运算符 含义
&& 逻辑与,双&符号,单&符号属于位运算符
|| 逻辑或,双|符号,单|符号属于位运算符
! 逻辑非

举例构造Scala对象,生成Scala脚本文件CompareOprate.scala(关于构造对象的详细内容将在后期的文章中分享)。如下脚本中介绍了一些比较运算符的实例。

object CompareOprate {def main(args: Array[String]) : Unit =  {var a = 18;var b = 8;      println("a = " + a + ", b = " + b)      println("a >= b = " + (b >= a))      println("a < b = " + (a < b))      println("a == b = " + (a == b))      println("a != b = " + (a != b))      println("a >= b || a < 10 = " + (a >= b || a < 10))      println("!(a <= b) = " + !(a <= b))   }}

Scala文件的执行与Java文件类似,需要一步编译过程,即使用scalac命令对CompareOprate.scala文件做编译。之后再对编译文件执行scala命令。

[root@hadoop char01]# scalac CompareOprate.scala  //编译Scala脚本[root@hadoop char01]# scala CompareOprate  // 运行编译后的文件a = 18, b = 8a >= b = falsea < b = falsea == b = falsea != b = truea >= b || a < 10 = true!(a <= b) = true
  • 数学运算符

运算符 含义
+ 和运算,如果加号两边为数值,为求和,如果加号两边包含字符串,则为拼接运算
- 减运算
* 乘法运算
/ 除法运算,需要注意的是,如果分子分母均为整数,则商为整数
% 求余运算
+= 自增运算
-= 自减运算
*= 自乘运算
/= 自除运算

举例构造Scala对象,生成Scala脚本文件MathOprate.scala。如下脚本中介绍了一些基本数学运算符的实例。

object MathOprate {def main(args: Array[String]) : Unit = {var  a = 23val  b = 6   println("a="+a + " ,b="+b) // 打印a和b的值   println("a + b =" + (a + b)) // 加法运算   println("a - b =" + (a - b)) // 减法运算   println("a * b =" + (a * b)) // 乘法运算   println("a / b =" + (a / b)) // 除法运算(两个整数的商)   println("a * 1.0 / b =" + (a*1.0 / b)) // 除法运算(浮点数与整数的商)   println("a % b =" + (a % b)) // 余数运算var c = a   c += 10 // 自加运算   println("a += 10 = " + c) // 式子中的加号为字符串的拼接运算        }}

如上脚本文件的编译过程和执行结果如下:

[root@hadoop char01]# scalac MathOprate.scala  //编译Scala脚本[root@hadoop char01]# scala MathOprate  // 运行编译后的文件a=23 ,b=6a + b =29a - b =17a * b =138a / b =3a * 1.0 / b =3.8333333333333335a % b =5a += 10 = 33

结语

本期的内容就介绍到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

每天进步一点点:数据分析1480

长按扫码关注我

PB byte 数据类型_大数据之脚踏实地学12Scala数据类型与运算符相关推荐

  1. url采集工具_大数据关键技术浅谈之大数据采集

    在前几篇文章中,企通查为大家介绍了大数据处理的基本流程.从大数据的一系列处理过程中(抽取.集成.分析.解释),我们可以发现这一整套流程中涵盖了数据存储.处理.应用等多方面的技术. 大数据价值的完美体现 ...

  2. 数据的四大特征_大数据

    数据的四大特征_大数据 我们总是在谈数据分析,数据分析什么的,那我们现在先不谈数据分析,我们先来谈谈数据分析的基础--数据.那么到底什么是数据,数据有什么特征呢?这个问题虽基础却重要. 这里我们所说的 ...

  3. 大数据介绍项目流程_大数据介绍

    大数据介绍项目流程 About Big Data 关于大数据 什么是大数据?(What is Big Data?) In modern world, there are many big proble ...

  4. 什么是大数据口子_大数据分析师年薪几十万,学什么专业才能从事大数据?

    近几年,大数据为各个领域带来了全新的变革,大数据的重要性越来越被企业和国家所看到,大数据工作者的需求再次被无限放大,他们的薪资和社会地位也在不断上涨.马云在演讲中就提到,未来的时代将不是IT时代,而是 ...

  5. 大数据项目一般金额多少_大数据分析师年薪一般多少?学什么专业才能从事大数据?...

    近几年,大数据为各个领域带来了全新的变革,大数据的重要性越来越被企业和国家所看到,大数据工作者的需求再次被无限放大,他们的薪资和社会地位也在不断上涨.马云在演讲中就提到,未来的时代将不是IT时代,而是 ...

  6. 计算map代码_大数据系列之计算框架MapReduce

    CDA数据分析师 出品 1. MapReduce计算框架简介 Mapreduce 是hadoop项目中的分布式运算程序的编程框架,是用户开发"基于hadoop的数据分析应用"的核心 ...

  7. 大数据 挑战 机会_大数据可视化面临哪些挑战

    数据可视化在大数据场景下面临诸多新的挑战,包括数据规模.数据融合.图表绘制效率.图表表达能力.系统可扩展性.快速构建能力.数据分析与数据交互等. 数据规模 大数据规模大.价值密度降低,受限于屏幕空间, ...

  8. 大数据薪水大概多少_大数据就业岗位有哪些?薪资多少?

    大数据免费全套视频课程,在文末留言"学习"抢! 很多小伙伴想入行大数据,只是听说大数据薪资很高,但对大数据行业具体情况不了解.大数据到底是做什么的?有哪些岗位?就业薪资具体是多少? ...

  9. 大数据分析师高级证书_数据分析师资格证书好考吗_大数据分析师认证

    数据分析师资格证书好考吗_大数据分析师认证 为了适应大数据时代的要求,数据分析这一工作需要更加正规化.专业化以及职业化,因此,数据分析师应运而生,成了较多人争相报考的科目.那么 一方面,据小编了解,数 ...

最新文章

  1. 【注意】关于Redis存在远程命令执行漏洞的安全公告
  2. 计算机可执行指令吧,电脑“开始-运行”的常用命令及用法!很有用!
  3. java面试题2014_Java生态系统– 2014年我的5大亮点
  4. 聚类(Clustering): K-means算法
  5. 连续整数的和(51Nod-1138)
  6. Flutter AnimatedContainer 动画使用解析
  7. XM7 FOR ANDROID,如何使用Android Studio开发Gradle插件
  8. TCP/IP 协议 —— ARP
  9. http --- 从输入URL到页面加载的过程发生了什么?
  10. 服务器上多个php,php – 在多个服务器上扩展cronjobs
  11. (己解决)黑苹果驱动英特尔核显疑问记录
  12. 线性回归——简单线性回归、多元线性回归
  13. 返回结果的HTTP状态码-HTTP(四)
  14. 前端基础-TCP/IP 不完全详解
  15. 大容量Flash型AT91系列ARM核微控制器
  16. 微信python小课_微信python小课靠谱吗
  17. Breez.LocalAPK.v1.8.1.x86.WinALL.Regged-BLiZZARD
  18. 浅谈网络地址转换(NAT)技术与内网、外网
  19. python load 和loads 区别
  20. 企业要实现用计算机完成存货管理,《会计信息系统》习题含答案

热门文章

  1. avue.js:done is not a function
  2. jenkins安装报错
  3. 实验室作业之英文文本聚类
  4. scapy 嗅探数据包(wireshark数据抓包)
  5. ios json包含html,IOS中Json解析的四种方法
  6. mac如何查看ssd寿命_延长Mac第三方SSD硬盘寿命
  7. 《致命框架2》——极简外衣下的华丽冒险
  8. Android4.4-Launcher源码分析系列之Launcher界面修改、壁纸替换、图标替换、修改滚动指示器
  9. 最新江苏安全员C考试多选练习题库
  10. java基础机试题_Java基础机试题