Spark基礎-scala學習(一)
阿新 • • 發佈:2018-12-04
fromfile read ddl 循環 new n-2 大量 cal 與操作
Scala解析器的使用
- REPL:Read(取值)-> Evaluation(求值)-> Print(打印)->Loop(循環)。scala解析器也被稱為REPL,會快速編譯scala代碼為字節碼,然後交給JVM執行
- val result = 1 設置變量不可變
- var result = 2 可變的變量
- val name: String = null 聲明變量類型
- val name: Any = "leo"
- val name1,name2:String = null 聲明多個變量
- val num1,num2=100
數據類型與操作符
- 基本數據類型:Byte、Char、Short、Int、Long、Float、Double、Boolean
- scala沒有基本數據類型與包裝類型的概念,統一都是類
- 使用以上類型,直接就惡意調用大量的函數,例如,1.toString(),1.to(10)
- 在scala中,操作符比如+-*/%&|^>><<等其實是數據類型的函數,比如1+1可以寫作1.+(1);例如1.to(10) 又可以寫作1 to 10
- scala中沒提供++、--操作符,只能用+=和-=。比如counter=1,counter++是錯誤的,必須寫作counter+=1
函數調用與apply()函數
- 函數調用,不需要傳遞參數,允許調用函數時省略括號,例如:"Hello World".distinct
- apply函數
- Scala中使用類名()的形式其實就是類名.apply()的縮寫,來創建類對象,而不是new 類名()的方式
- 例如"Hello World"(6)因為StringOps類中有def apply(n: Int):Char的函數定義,所以"Hello World"(6),實際上是"Hello World".apply(6)的縮寫
條件控制與循環
- if(age > 19) 1 else 8 存在返回值
- if(age > 18) "adult" else 0 當返回值類型不同,會取公共父類型Any
輸入輸出
- val name = readLine("Welcome to House")
- val age = readInt()
- for(i <-1 to n) print(i)
- for(i <-1 until n) println(i) 表示不達到上限
- for(c <- "Hello World") print(c) 對字符串遍歷,類似於java增強for循環
for(i <- 1 to 9;j <- 1 to 9){
if(j==9){
println(i*j)
}else{
print(i*j+" ")
}
}
函數入門
- 定義函數,age為返回值
def sayHello(name:String,age: Int) = {
if(age > 19) {
printf("hi %s,you are a big boy\n",name)
age
}else{
printf("hi ,%s,you are a children\n",name)
age
}
}
def sum(n:Int) = {
var result = 0
for( i<- 1 to n){
result += i
}
result
}
def fab(n: Int): Int = {
if(n <= 0) 1
else fab(n-1)+fab(n-2)
}
函數默認參數
- 默認參數
def sayHello(firstName:String,middleName:String = "",lastName:String="") = firstName + " " +middleName+" "+lastName
- 帶名參數調用,可以不按順序
sayHello(firstName="hahha",middleName="xxx",lastName="ggg")
變長參數
def sum(nums: Int*)={
var result = 0
for(num <- nums){
result += num
}
result
}
sum(1 to 5: _*) //值為15,表示取出1到5的整數相加
def sum2(nums:Int*):Int = {
if(nums.length == 0) 0
else nums.head + sum2(nums.tail: _*)
}
lazy值和異常
//定義過程,不會有返回值
def sayHello(name:String):Unit = "Hello,"+name
lazy val lines = fromFile("/home/1.text").mkString
//使用的時候才會執行上面這句
print(lines)
異常
try{
throw new lllegAlrgumentException("x should not be negative")
}catch{
case_:lllegAlrgumentException => print("sorry,error")
}finally{
print("release io ")
}
Spark基礎-scala學習(一)