spark摘星之路(2)--Scala基础(1)

1.Scala数据类型

Scala的每个基本类型都是以类的形式通过编译器转换成java的基本类型。Scala的数据类型如下图所示:

2.Scala变量类型

Scala具有val和var两种类型的变量。对于可变变量使用var声明,对于不可变变量使用val声明。

对于类似定义spark中RDD 而言,一般使用val声明。

scala> var x = 1000
x: Int = 1000
scala> x = 2000
x: Int = 2000
scala> val x = 1000
x: Int = 1000
scala> x = 2000
<console>:12: error: reassignment to val
       x = 2000
         ^

3.Scala函数

3.1函数结构

def 函数名(形参名:形参类型):返回值类型={

       函数体

       return 返回值

}

通过使用def关键字定义函数,在Scala操作中可以把函数作为变量使用,也可以在函数内部嵌套函数,如果返回值无类型,可以使用关键字unit定义,在某些情况可以不定义返回值类型(通过形参之间运算的结果让系统自动推测),但是还是建议定义返回值类型,增加程序的可读性。

3.2函数类型

3.2.1成员函数

成员函数就是在类中定义的函数,可以调用类中所有的函数和类变量。

3.2.2局部函数

在函数中定义的函数就是局部函数。子函数只可以使用父函数的变量。

3.2.3高阶函数

把函数以参数方式使用的函数就叫做高阶函数,可以大大的减少代码量。

高阶函数使用格式:

def 函数名( 调用函数名:( 调用函数参数类型) =>  调用函数返回值类型): 函数返回值类型 = {

                                                                函数体

}

3.2.4匿名函数

有点类似于python中的lambda,具体形式:

(形参:形参类型) => {函数体}

如果函数体只有一句,可以省略大括号。匿名函数可以直接以形参的身份进行定义,也可以当作普通函数使用,可以通过调用函数进行赋值操作。

3.2.5闭包

对于局部函数而言,我们可以通过调用父函数的形参来当作变量进行操作,具体形式

scala> def star(spark:Int,hd:Int):Int = {
     |     def smallStar(x:Int,func:(Int)=>Int):Int={
     |         val y = x+1
     |         func(y)
     | }
     |     val result = smallStar(spark,(n:Int)=>(n*hd))
     |     result
     | }
star: (spark: Int, hd: Int)Int
scala> star(20,30)
res0: Int = 630

其中(n:Int)=>(n*hd)这个匿名函数中,n 是匿名函数的参数,hd是smallstar的父函数star的形参,因此构成了闭包。

所谓的闭包就是调用了本函数之外的变量,smallStar函数只有一个n参数,hd不属于smallStar内的元素。

猜你喜欢

转载自blog.csdn.net/wi0pdr88/article/details/82493295