spark快速开发之scala基础之1 数据类型与容器

时间:2023-02-19 08:46:35

写在前面

面向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. 关于 Xcode8打印JSON的时候,NSLog控制台显示不完整

    看到打印结果之后  为什么只打印了一部分???为什么呢??? 我也不知道为什么,可能是xcode8的原因. 借鉴了下国外人说了,printf可以打印全,自己写了个输出宏 #ifdef DEBUG #d ...

  2. C#递归遍历子目录与子目录中的文件

    [转载]作者:weixingstudio 采用C#,通过指定一个路径,来递归的遍历所有的子目录以及子目录中的文件,建一个类似资源管理器的目录树 先递归的遍历所有的子目录,如果没有子目录以后,则遍历所有 ...

  3. Linux常用命令_(备份压缩)

    备份打包:tar 指令名称:tar语法:tar 选项[zcvf] [文件或目录]-z 使用gzip压缩.tar文件-c 产生一个.tar文件-v 观看归档过程-f 指定归档后的文件功能描述:归档文件目 ...

  4. SQL2008安装自动退出

    一同事安装sql 2008 然后删除过,后来再也装不上了,安装SQL2008操作执行到安装支持文件的时候就会出现安装过程自动退出的现象. 网上很多人说需要卸载,我看原因不一定是这个,因为根本没有安装成 ...

  5. Android:常见错误提示

    记录开发中常出现的错误 1.遇到这样的错误时,应该立马想到是书写错误或语法错误,常见为android:name写成了name Attribute is missing the Android name ...

  6. HDU 1024 Max Sum Plus Plus 简单DP

    这题的意思就是取m个连续的区间,使它们的和最大,下面就是建立状态转移方程 dp[i][j]表示已经有 i 个区间,最后一个区间的末尾是a[j] 那么dp[i][j]=max(dp[i][j-1]+a[ ...

  7. android usb Host模式下与usb Hid 设备的通信

    做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法: 1,第一次遇到的问题:android 版本低不支持usb hid, 被要求做相关项目的时候,就从mUsbMana ...

  8. Java中printStackTrace()、toString()、getMessage()的区别

    一.三者之间的关系图: 二.演示 1.printStackTrace()演示: public class Test {     public int div(int a, int b)     {   ...

  9. Java---网络编程(1)

    网络编程 相关基础概念 1.计算机网络与Internet 2.TCP/IP协议 3.Internet地址 - - -IP地址,形如xxx.xxx.xxx.xxx - - -域名系统.例如www.edu ...

  10. ●BZOJ 3129 [Sdoi2013]方程

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3129 题解: 容斥,扩展Lucas,中国剩余定理 先看看不管限制,只需要每个位置都是正整数时 ...