写在前面

面向java开发者。实际上,具有java基础学习scala是很容易。java也可以开发spark,并不比scala开发的spark程序慢。但学习scala可有助于更快更好的理解spark。比如spark的很多算子group,filter之类的,全都是scala语言本身所具备的功能。再比如,想做一个更高级别的spark开发者,势必需要了解spark源码。哪怕不需要通读,但也需要了解scala语言。

快速入门的意思先具备一个宏观上的系统而整体的把控,然后再到这个框架上去把血肉丰满。从阅读源码的角度来说,作为一个java开发者,在数据类型和容器,控制语句等方面,哪怕不会写,至少能大致读懂。但涉及到更高层次的高阶函数,就很头痛了。

比如list。只会讲声明,增删查改以及循环。就能满足大多数情况下的开发。至于其它的功能,通过查看文档,或者源码,就可以搞懂。涉及到像增这一块,比如添加一个元素,list有【++: ++ +: :+ :: ::: :\】等很多功能。但本文只涉及最简单的东西。总之,这是一个简易版的入门。后续的学习不能停止

数据类型

scala数据类型与java基本类似。scala在面向对象方面,比java列我彻底。java有8种基本数据类型,在scala里面全是对象。

Byte 8位有符号补码整数。数值区间为 -128 到 127
Short  16位有符号补码整数。数值区间为 -32768 到 32767
Int 32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long  64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float  32位IEEE754单精度浮点数
Double  64位IEEE754单精度浮点数
Char  16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
Boolean  true或false

其它常见数据类型:

Unit  表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null  null 或空引用
Nothing  Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。
Any  Any是所有其他类的超类
AnyRef  AnyRef类是Scala里所有引用类(reference class)的基类

变量

在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量。

声明变量实例如下:

var myVar : String = "Foo"
var myVar : String = "Too"

以上定义了变量 myVar,我们可以修改它。

声明常量实例如下:

val myVal : String = "Foo"

以上定义了常量 myVal,它是不能修改的。如果程序尝试修改常量 myVal 的值,程序将会在编译时报错。

变量声明不一定需要初始值,以下也是正确的:

var myVar :Int;
val myVal :String;

变量类型引用

在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。

所以,如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错。

var myVar = 10;
val myVal = "Hello, Scala!";

以上实例中,myVar 会被推断为 Int 类型,myVal 会被推断为 String 类型。


Scala 多个变量声明

Scala 支持多个变量的声明:

val xmax, ymax = 100  // xmax, ymax都声明为100

集合

list
//定义
var list = List("spark","hadoop","storm")
var nums = List("sdf","spark")
val empty : List[Nothing] = List() val list2 = list.+:("sdf")//在头部添加元素
println(list2)
val list3 = list.++(nums)//合并两个集合
println(list3)
val list4 = list.:+("sdf")//在尾部添加元素
println(list4) val item = list take 3 //取前几个元素
val head = list.head//取第一个元素
val last = list.last//取最后一个元素 list.updated(1, "mr")//更新 //循环
list.foreach(println)
list.map(println)

数组

大体与list相当

    //array
val array : Array[Any] = Array("spark","hadoop","storm")
println(array)
val array2 : Array[String] = Array("spark2","hadoop2")
array.foreach(println)
println(array(0))//取值
println(array.apply(0))//取值
val array3 = array.++:(array2)
println("================")
array3.foreach(println)//循环
val array4 = array.+:("spark").:+("hadoop")//加值
println("================")
array4.foreach(println) val array5 = array.++(array2) array5.foreach(print) //seq
val seq = Seq("hadoop","spark")
println(seq)

map

Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。

默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map

    var map = Map("spark"->1,"hadoop"->"1")
val map2 = Map("spark2"->1,"hadoop2"->"1")
val map3 = map.+(("storm"->1))//添加一个元素
map += ("storm"->1)//添加一个元素
val map4 = map.++(map2)//合并两个集合
println(map4)
map.contains("spark")//判断一个元素是否存在
map.isEmpty//是否为空
//得到key集合
val keys2 : Iterable[String] = map.keys
val keys : Set[String] = map.keySet
val iter : Iterator[String] = map.keysIterator

set

Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的。

Scala 集合分为可变的和不可变的集合。

默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包。

   val set = Set("spark","spark","hadoop")
set += "storm" //异常
val mutableSet : Set[String] = Set("spark","spark","hadoop")
mutableSet += "hive"
println(mutableSet)
mutableSet.add("scala")
println(mutableSet)
mutableSet.remove("scala")
println(mutableSet)
mutableSet -= "hive"
println(mutableSet)



spark快速开发之scala基础之1 数据类型与容器的更多相关文章

  1. spark快速开发之scala基础之5高阶函数,偏函数,闭包

    高阶函数 高阶函数就是将函数作为参数或者返回值的函数. object function { def main(args: Array[String]): Unit = { println(test(f ...

  2. spark快速开发之scala基础之3类,对象,特征

    类 scala的类定义非常灵活 class test4 class test2{} class test3(x:Int) 定义一个带构造函数的类 class Point (x : Int,y : In ...

  3. spark快速开发之scala基础之2控制流程

    判断结构 大体与java相当.scala没有三元表达式. val num = if(1>0) 1 else 0 //相当于匿名函数 println(num) var num2 = 0 if(1& ...

  4. Android Studio快速开发之道

    概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. P ...

  5. iOS 开发之 GCD 基础

    header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...

  6. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  7. ios开发之OC基础-oc小程序

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  8. ios开发之OC基础-ios开发学习路线图

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  9. Hybrid App开发之JavaScript基础

    前言: 前面学习了html和css的基本使用,今天开始学习JavaScript的使用. 什么是JavaScript JavaScript是一种基于对象(Object)和事件驱动(Event Drive ...

随机推荐

  1. pychram 2018-01 安装pyQT5报错

    pychram 2018-01 安装pyQT5报错

  2. oracle基础 管理索引

    转自:https://blog.csdn.net/without_bont/article/details/79862112 管理索引   ---    原理介绍 索引是用于加速数据存取的数据对象.合 ...

  3. 关于npm 包的发布

    注册一个npm 账号,打开命令行输入 npm add user 然后登录 npm login 发布npm 包,在你要发布的包的目录下,在创建账号后需要认证邮箱,否则无法发布,发布同一个包,每次的版本需 ...

  4. centos如何安装jdk8

    首先下载jdk1.8  去官网下载jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...

  5. stage.focus后 有黄色边框怎么去掉

    stage.stageFocusRect = false; stage.focus=niao; 必须先设为false

  6. English-英语学习杂志及资料

    [英文原版杂志] >>经济学人 英文原版PDF+双语版+文本音频 超全下载!http://bbs.zhan.com/thread-8443-1-1.html?sid=2004 >&g ...

  7. 算法练习,链表二分最大n个

    import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; public class Bin ...

  8. Servlet基本_クッキー、URLリライティング

    1.クッキーの基礎クッキーは.クライアント側に保存されるテキストデータです. セキュリティ上の制約.・自分で発行したクッキーにしかアクセスできない.クッキーには発行元のホストの情報が記録されている.・ ...

  9. Linux:简单的并发服务器实现

    我前两天实现了一个简单的服务器和一个对应的客户端,也简单的解决了一些错误检查和常用的函数的封装,但是那个服务器的一次只能连接一个客户端,鸡肋,太鸡肋了,今天我来实现可以连接多个客户端的服务器实例:多进 ...

  10. PHP对redis操作详解

    /*1.Connection*/$redis = new Redis();$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1 ...