一、搭建环境:
1.下载
2.解压
3.配置环境变量,把SCALA_HOME/bin加到path
4.scala基于JVM运行,需要安装jdk
二、scala是纯面向对象的语文,一切皆对象,一切对象都有方法,java是支持面向对象的
1.var name="jack" var 可变变量,可以被改变
val age=10 val 不可变变量,不能被改变
spark中RDD的内容都是不可变的
2. 基本类型3是有方法的:3.to 按Tab键,发现int类型的数字也有方法
toByte toChar toDouble toFloat toInt toLong toShort toString
3.变量声明 :可指定类型,也可不指定类型
var age:Int=0
var name:String=null
如果定义变量时指定了类型,后面给变量赋值只能赋该 类型及子类型
4.一行可声明多个变量
val age1,age2,age3=0
5. Int本身没有to方法,scala编译运行时,隐式自动转换成rich integer类型,这种类型中有to方法
scala> 0.to(5)
res4: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5)0.to(5) :取到Range集合
scala类型不分java中的int和Integer
6. 1.+(1)
1本身是一个对象,+是它的方法,括号里是它传进来的参数
7. scala中没有 ++,--这种操作符号
age+=1
8.可导入库进行很多操作:scala本身有很多库,又可以直接使用java的库
import scala.math._
min(20,4) :取最小数
9.创建数组
Array(1,2,3,4)
val array=Array(1,2,3,4)
其实内部使用Array.apply(1,2,3,4)
val array=Array.apply(1,2,3,4)
spark中大量使用apply
10. if表达式
val age=19
if(age>=18) "adult" else "child"
或if(age>=18) {"adult"} else { "child"}
在scala中if表达式是有结果的,可以用变量去保存
val result=if(age>=18) "adult" else "child"
scala> val result=if(age>=18){}
result: Unit = ()Unit是scala中一种类型
scala> val result=if(age>=18){
| "adult"
| 9|}
<console>:13: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
"adult"
^
result: AnyVal = 9var buffered = 0
val result=if(age>=18){
"adult"
buffered = 10buffered
}buffered块表达式的最后一行,作为默认的返回值
scala块表达式中,看着没有返回值,实际最后一行就是返回值
11.打印
println("spark")
print("spark")
占位符
printf(" %s is the future of big data. ","spark")
12. 输入:读取输入的内容
readLine 不加参数的时候,括号可以不写
readLine(" please enter your password:")
13.读取整数
readInt
14.while循环
var element=100
while(element>10){
println(element)
element-=1
}
15.for循环
0 to element:本身是一个集合
for(i<- 0 to element) println(i)
<- 是提取符,每次提取集合中的一个元素
for(i<- 0 to element if i%2 == 0 ) println(i)
16.中止循环
val n=10
def f1:Any={
for(i<- 1 to 10){
if(i==n) return i
println(i)
}
17.函数定义def,函数要想有返回值,后面要加=
def f2:Any={
for(i<- 1 to 10){
if(i==n) return i
println(i)
}
def f3(p1:String,p2:Int=30)=p1+p2
调用f3("Spark")
结果:Spark30
调用函数可以不按参数顺序,按名称去调用
f3(p2=100,p1="Scala")
18.变长参数
def sum(numbers:Int *)={
var result = 0
for(element<- numbers)
result+=element
result //最后一条语句是返回值
}
调用:sum(1,2,3,4,5,6,7)
def sum(numbers:Int *)={ var result = 0;for(element<- numbers) result+=element;result} //多条语句写一行,要用;分隔
sum(1 to 100)是不可以的
sum(1 to 100:_*) :这样调是用以的,:_*是把Range里面的每一个元数提取出来
19.过程与函数的区别:过程是没有返回值的函数
如果想一次输入多行,可用:paste模式来粘贴多行,要想退出paste模式用快捷键,Ctrl+D