Spark学习scala语法
Posted lq13035130506
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark学习scala语法相关的知识,希望对你有一定的参考价值。
一,变量
1,基本数据类型
2,基本运算符
3,定义变量
4,复杂变量
(1)定义数组Array:
- 声明:val aList=new Array[数据类型type](n):声明存储数据类型为type的n个对象,数组初始化为null
- 声明:val aList=Array(n1,n2,n3...):声明时,可以不用声明数据类型。
- 调用:aList(m):调用第m个元素。
- 声明多维数组:val aList=Array.ofDim[数据类型](a,b):声明行为a,列为b的二维数组
- 调用多维数组中的元素:aList(a1)(b1):调用数组中行为a1,列为b1的元素
(2)定义元组Tuple(对多个不同类型的对象的简单封装):
- 声明: val tStudent=("name1",23,"男",560.00):声明元组类型学生的信息为(姓名,年龄,性别,月开销)
- 调用:tStudent._1(取出"name1");tStudent._2(取出23);tStudent._3(取出"男")....
(3)定义容器Collection(导包scala.collection;scala.collection.mutable;scala.collection.immutable)
scala.collection:封装了可变容器和不可变容器的通用操作的超类(从上到下依次继承都是特质(类似Java的接口),不是具体的容器)
foreach方法:遍历当前容器内所有元素
(4)定义序列Sequence(如上图Seq有两个子序列:IndexedSeq和LinearSeq)有存入数据有先后顺序,可以重复
LindearSeq:列表和队列可以继承该类
List(列表):具体的容器类,列表内的对象必须是同类型,列表内的值不可变(必须导包scala.collection.immutable)
定义:val slPeople=List("张三","李四","王五"......)
头部:head;尾部:tail 获取头部(第一个元素:slPeople.head);获取尾部(除去第一个元素以外的元素:slPeople.tail)
向列表头添加新的元素从而生成新的列表:val slNewList="赵四"::slPeople(不能给列表的尾添加元素)
Range(队列):是一种特殊的带索引的不可变数字等差序列(range内可以存放任何类型数据)
定义:val irNum=new Range(n1,n2,m):与Python的range函数功能相同,n1(开始量)n2(结束量,取不到)m(步长)
1 to 8 by 1:得到包括8的Range(1,8,1)序列
1 until 8 by 1:得到Range(1,8,1)序列
IndexedSeq:Vector和ArrayBuffer可以继承该类
Vector(向量):
定义:val svPeople=Vector("张三","李四","王五"......)
获取元素svPeople(n):获取第n+1个元素
向Vector的头添加元素:svPeople1="赵四"+:"钱七"+:svPeople;向Vector的尾添加元素:val svPeople2=svPeople:+"孙八"
(5)定义集合Set:存放不重复元素,没有先后顺序,用哈希方法去查找元素(默认为不可变集合)
可变集:(导包scala.collection.mutable)
不可变集:(导包scala.collection.immutable)
import scala.util.control.Breaks._; import scala.collection; import scala.collection._; import scala.collection.immutable._; var ssPeople=Set("张三","李四"); //Set("张三","李四")是不可变集,将不可变集赋给可变变量ssPeople ssPeople+="王五"; //将"王五"赋加给变量ssPeople后生成新的不可变集Set("张三","李四","王五") import scala.collection.mutable._; //要定义可变集必须导入这个包 val ssPeople1=Set("张三","李四"); //Set("张三","李四")是可变集, ssPeople1+="王五";
(6)定义映射Map:一系列键值对的容器,键唯一但值不唯一(默认为不可变映射)
可变映射:(导包scala.collection.mutable)
不可变映射:(导包scala.collection.immutable)
import scala.util.control.Breaks._; import scala.collection; import scala.collection._; import scala.collection.immutable._; var ssPeople=Map("姓名:"->"张三","年龄:"->16); //不可变映射 import scala.collection.mutable._; //要定义可变集必须导入这个包 val ssPeople1=Map("姓名:"->"张三","年龄:"->16); //Set("张三","李四")是可变映射, ssPeople1+=("性别"->"男","学号:"->20173522); //向可变映射中添加多个元素 ssPeople1("姓名:")="李四"; //更新可变映射中的元素 ssPeople1("学校:")="石家庄铁道大学"; //向可变映射中添加单个元素 print("查询姓名"); var result=if(ssPeople1.contains("姓名:")) ssPeople1("姓名:") else "无法查询姓名" //当映射中存在键为"姓名:"则将对应的值赋给result,否则将无法查询xx赋给result print(s"姓名:$result");
二,输入,输出
1,从控制台输入(导包:scala.io.StdIn):
2,输出(默认导包scala.Predef):
(1)类Java的输出方式: print("姓名:"+name+" 年龄:"+age)或println("姓名:"+name+" 年龄:"+age)
(2)类C的输出方式:printf("姓名:%s 年龄:%s",name,age)
(3)s插值字符串输出法:print(s"姓名:$name 年龄:$age")
(4) f插值字符串输出法(格式化):
三,读写文件(导包java.io.PrintWriter和scala.io.Source)
1,写入(导包java.io.PrintWriter):向文件test.txt中写入信息:
2,读取(导包scala.io.Source):
四,控制结构
1,for结构:
用法一:基本结构
用法二:for结构中加条件
用法三:支持多个生成器,用;隔开
用法四:将遍历的值付给变量
2,异常处理(try......catch.....)
3,循环控制(不存在break和continue终止循环)
使用Breaks类(导包scala.util.control)
当使用breakable方法:
import scala.util.control.Breaks._; var i=0; val array=Array(1,3,6,15,9,12,16); breakable{ //这个大括号不能换行 for(i<-array) { if(i>10) break; //循环到15直接跳出循环 print(i+" "); } }
4,判断值是否存在:contains()
以上是关于Spark学习scala语法的主要内容,如果未能解决你的问题,请参考以下文章