您的位置:首页 > 其它

Scala基础语法、函数及Array、Map、Tuple

2016-05-20 00:46 267 查看

第一课

内容概述

1.Scala基础语法

2.Scala中函数

3,Scala中的Array、Map、Tuple

Scala基础

1. Scala的重大价值

首先,java并不伟大,伟大的是JVM(来自于java之父),而scala是基于JVM的。Scala可以调用所有的java的库,scala是升级版的java。升级之一切皆对象,对象皆有方法,列如整型常量1,在scala里也是有方法的,1.tostring()在scala里是合法的。升级之二面向函数和面向对象的结合,面向对象有利于团队开发,而面向函数则有利于方法的书写,适合大型项目,通常是java开发项目的代码量的1/5-1/10。
Scala主要用于大数据中的大数据计算,spark是有scala开发的,实现算法简洁优雅,kafka通信中间件是由scala开发的。
Spark环境:版本2.10.4 + java1.80.60-b27

2. Scala基础语法

变量的声明:var 可变变量声明,val int a
val 不可变变量声明,val int a
对于变量来说,尽可能使用不可变变量进行声明,因为在处理数据时,大多数是不可变的,例如spark内部数据的默认类型是不可变,许多通信交流时,通信对象是不可变的。在声明变量时可以声明类型也可以不声明类型,但是声明类型后,赋值时,只能赋值同类型或子类型的值。
Java中存在基本类型和封装类型,但是scala中基本类型和引用类型是可以自动转换的,即基本类型也是有方法的,如1.tostring()(一切皆对象),再如,1+1 执行时是1.+(1)。
Scala中无++、——操作符,但是可以用 +=、-=代替,scala提供了大量的库,如scala.math._库中min()、max()。
在建立对象时,scala是调用object的apply方法进行的,类似于java中的工厂方法。
Scala中表达式是有结果或返回值的,这点与java不同,代码块的返回值是,代码块的最后一行的内容的值。

3. Scala函数入门

输入函数:println(“ a b c ”) //输出结果后换行

println<=> println() //输出为空

print //输出后不换行

print(“\n”)<=> println

printf(“%s”,s) //格式化输出

读入函数 readLine <=>redline() //无提示符读入

readInt //读取指定整型类型的值

循环结构:while循环

for循环: for(i <- 0 to 20 ) println(i)

for(i<- 0 to 20 if i % 2 == 0) println(i)

函数定义 def f1:int = { 函数体 } (最后一行为返回值)

在函数定义时,若是无法推断函数的返回值时,函数必须显示声明返回值。

默认参数:def f1(param1:int, param2:String = “spark”) = param1 + param2

变长参数:def f1(param:int*) = {}

range转换为函数参数:1 to 100 : _* 把range中的所有元素提取出来。

过程即是没有返回值的函数。

Lazy变量:只有在第一次调用时才执行的变量,一般用于耗时的操作中,如文件的读取。

异常处理:try{

}catch{

}finally{

}

catch代码块中用于捕获异常,finally始终执行,用于一些类似于关闭文件的操作。

4. Scala 中Array、Map、Tuple

Array可以先声明后赋值,亦可以直接赋值。例如

Val array = Array[Int](5)

array(1) = 2

val array = Array (1, 2, 3, 4)

可变数组ArrayBuffer,可以加入任意数量的元素,不会出现数组越界。

加入操作:arrayBuffer += (2,3,4)

删除操作:.trimStart(n) //从数组的头开始删除n个元素

.trimEnd(n) //从数组的尾开始删除n个元素

.remove(d) //从数组中删除第d位的元素
并返回删除元素的值
.remove(d,n) //删除数组中从d位算起的其后n个数
插入操作:.insert(d,x)//在d位插入元素,其中可以插入一个或多个元素
转换操作:arraybuffer.toArray //将可变数组转换为不可变数组
Array.toBuffer //将不可变数组转换为可变数组
数组遍历:for(i<- 0 until (arr.length, 2)) println(arr(i))
for(i <- (0 untilarr.length) .reverse) println(arr(i))//从尾部开始遍历
数组转换为字符串:arr.mkString(“,”)
排序: scala.util.Sortint.quickSort(arr)
遍历时可以使用yield,其将收集yield后的表达式的值并组成一个Array
for (i <- arr if i % 3 == 0) yield i*i
过滤: arr.filter(_ % 3 == 0).map( i => i*i )

Map存储的是键值对
val person = map(“spark” -> 6, “hadoop” -> 11) //赋值
person += (“flink”-> 5) //添加
person -= (“flink” -> 5) //删除
person.contains(“spark”) //包含
person.getorElse(“spark”,100) <=>
if(person.contains(“spark”)person(“spark”)else 100)
for((key,value) <- person) println(key + ” ”+value) //遍历
scala.collection.immutable.SortedMap(“key”->value)//按key值排序

tuple元组 val tuple = (“spark”, 6, 9, 6) //赋值
tuple._1 //取元组中位置为1的元素

说明:该笔记来源于DT大数据IMF课程第一课
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: