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 aval 不可变变量声明,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课程第一课
相关文章推荐
- 修改Linux系统时区
- 《浪潮之巅》读后感
- [XML]学习笔记(八)XSLT
- [PWA] 15. Using The IDB Cache And Display Entries
- 233
- Ubuntu Fcitx 繁简输入切换
- 课后作业 (反转链表)
- 使用命令创建github代码仓库,push本地仓库到github远程代码仓库
- UML学习小结
- SM2算法第十七篇: no OPENSSL_Applink 的错误
- 深入探究js的原型与原型链
- vim 技巧总结
- 在unity向量空间内绘制几何(1):通过将极坐标转换为直角坐标,绘制阿基米德螺线,对数螺线与玫瑰线等几何图形
- lightoj1214 - Large Division
- AnnotationsFramework注解框架的使用(一)
- 每天一个linux命令(30): chown命令
- Objective-C中的Block
- 介绍一下Make? 为什么使用make?
- 画图解释 SQL join 语句
- 中文停用词词表