Scala变量定义
两种(value和variable):
Val a:int=1 #变量不可变定义,类似于Java的final
Var a:int=1 #变量可变定义,可进行多次赋值
类型推断机制:
(定义变量时,可自动检测数据类型)
Val a=1 得到的是val a:int=1
Scala控制台的输入输出
使用import io.Stdin_包
输入:
var i=readInt() #整数的输入
var f=readFloat #浮点数的输入
var b=readBoolean #布尔类型的输入
var str=readLine("please input your name:")#字符串类型的输入
输出:
Print() #直接输出
Println()#输出后换行
Printf()#直接输出
(注意:输出字符串需要” ”,’ ’会出错)
Scala文件写入
使用import java.io.PrintWriter包
val outputFile = new PrintWriter("test.txt") #建立写入对象
outputFile.println("Hello World") #写入并换行
outputFile.print("Spark is good")
outputFile.close() #结束写入(注意必须要有此动作才能成功写入,因为写入操作是在内存中进行,若没有结束写入,数据在内存中没有被写入本地文件)
Scala 文件读取
使用scala.io.Source包
Import scala.io.Source
Val inputFile = Source.fromFile(“filename”) #定义对象变量
Lines = inputFile.getLines #读取数据,按行读取
For(Line<-Lines)println(Line) #循环输出,输出完变量就会置空
控制结构
1、For循环
for(变量<-表达式){语句块}
看不懂来点例子:
例1:
for(i<-1 to 5)println(i)
例2:
for(i<-1 to 5 if i%2==0)println(i)
例3:(多个生成器)
For(i<-1 to 5; j <-1 to 3)println(i*j)
2、For推导式:
for (变量 <- 表达式) yield {语句块}
来点例子:
例1:
scala> val r = for (i <- Array(1,2,3,4,5) if i%2==0) yield { println(i); i}
2
4
r: Array[Int] = Array(2,4)
Scala数据结构
- 数组(Array):
Val myarr = new Array[int/String](3)
Scala可以自动检测数据类型
Val myarr = Array(12,25,33)
- 元组(Tuple):
Val tuple = (“bigData”,205,45.0)
索引出元组元素:
Println(tuple._1)#第一个元素,”bigData”
Println(tuple._2)#第二个
Println(tuple._3)#第三个
- Range类:
Val r = new Range(1,5,1)
创建一个从1到5的数值序列(不含终点5),步长为1
- 映射(Map):
一系列键值对的容器。键是唯一的,但值不一定是唯一的。可以根据键来对值进行快速的检索
例1:
Val myMap = Map(“XM”->”scala”,”xm1”->”scala1”)
Print(myMap(“XM”)) #显示键值对应内容
例2:使用contions判断键值是否存在
Val map1=if(myMap.contions(“x”))myMap(“x”) else 0
若键值不存在就补0.
- 迭代器(Iterator):
不是一个容器,而是提供了按顺序访问容器元素的数据结构
两个基本操作,next和hasNext。next可以返回迭代器的下一个元素,hasNext用于检测是否还有下一个元素。类似c中指针的一个东西。
例1:
val iter = Iterator("Hadoop","Spark","Scala")
while (iter.hasNext) {
println(iter.next())
}
Scala编写spark常用函数
函数表达格式:
def 方法名(参数列表):结果类型={方法体}
def counter(value: Int): Int = { value + 1}
用定义变量的方式定义函数:
val counter: Int => Int = value => value + 1 或
val counter = (value: Int) => value + 1
占位符语法
val add= (a: Int, b:Int) => a+b //可以简化为如下:
val add = (_:Int) + (_:Int) //等价于(a:Int,b:Int)=>a+b,(‘_’可表示在表达式中只出现一次的变量)
Filter()函数:()跟boolan类型,判断
Array(1,2,3,4,5).filter(_>3) //返回Array(4,5)
Foreach()函数:跟处理表达式,表示对每个元素遍历操作
List.foreach(i=>println(i))或list.foreach println
Map()函数:跟处理表达式,表示对每个元素遍历操作
books.map(s => s.toUpperCase)#将列表中每个字符串中的每个字母变成大写字母
Flatmap()函数:跟处理表达式,表示对每个容器的每个元素处理后再进行整合成同一个容器
val books =List("Hadoop","Hive","HDFS")
scala> books flatMap (s => s.toList)#toList()函数表示将每个字符串拆解成字符
res58: List[Char] = List(H, a, d, o, o, p, H, i, v, e, H, D, F, S)