2016 第四讲 Scala模式匹配、类型系统彻底精通与Spark源码阅读

20160104 19:00-21:00 课程笔录

Scala模式匹配:可以对值,类型,集合进行匹配

(1)值匹配

// a. data值为Spark,Hadoop或其他时
def bigData(data: String){
data match {
  case "Spark" => println("Wow!!!")
  case "Hadoop" => println("Ok")
  case _ => println(" Something others")
bigData:(data: String)Unit

>bigData("Spark")
Spark
>bigData("Hadoop")
Hadoop
>bigData("else")
Something others


//b. 注意 data值为Flink时的写法,  data_

def bigData(data: String){

data match {
case "Spark" => println("Wow!!!")
case "Hadoop" => println("Ok")
case data_  if data_ == "Flink" => println("Cool")
case _  => println ("Something else")

>bigData("Flink")

Cool


//c.

def bigData(data: String){

data match {

case "Spark" => println("Wow!!!")
case "Hadoop" => println("Ok")
case _  if data == "Flink" => println("Cool")
case _  => println("Something else")
>bigData("Flink")

//d. 

def bigData(data: String){
data match {
case "Spark" => println("Wow!!!")
case "Hadoop" => println("Ok")
case  data  if data == "Flink" => println("Cool")
case _  => println("Something else")
>bigData("Flink")

(2)类型匹配

import java.io._
def exception(e:Exception) {
e match {
              case fileException: FileNotFoundException => println("File not found :" + fileException)
               case _: Exception => println("Exception getting thread dump from executor $executorId", e)
}

}

>exception(new FileNotFoundException(" Oops!!!")


(3)集合匹配

def data(array: Array[String]){
array match {
case Array("Scala") =>println("Scala")
case Array(spark, hadoop, flink) =>println(spark + " : " + hadoop + " : " + flink)
case Array("Spark", _*) => println("Spark ...")
case _ => println("Unknown")
}
}

>data(Array("Scala"))
Scala

>data(Array("hello","world","google"))
hello : world : google

>data(Array("Spark"))   
Spark...

>data(Array("Spark","test"))
Spark...

类型系统
// 相当于java的Bean
case class  
case class Person
//实例化
case class Person(name: String)

>class Person

>case class Worker(name: String, salary: Double)  extends Person

>case class Student(name: String, score: Double)  extends Person

def sayHi(person: Person){

    person match {
        case Student(name, score) => println(name + score)
        case Worker(name, salary) => println(name + salary)
        case _ => println("Unknown")  
    }
}


>sayHi(Worker("Spark ",6.4))
>sayHi(Student("Spark ",6.5))
>sayHi(Student("Hadoop ",6.6)

sayHi(Worker("Spark ",6.4))


类型体系

泛型类、泛型函数、类型界定(upperBound)、视图界定(View Bounds)、协变和逆变等

类型参数,主要用于类型限定,加强代码的健壮性

1. 泛型类和泛型函数

2. 类型界定

对类型也可以限定边界,upperBounds(<:表示,上边界,是它或它的子类),(>:表示,下边界,是某个类的父类或类本身)

3. 视图界定

//

Manifest -> ClassTag

abstract class RDD[T: ClassTag](
@transient private var _sc: SparkContext,
@transient private var deps: Seq[Dependency[_]]
)

RDD[T: ClassTag]
T:ClassTag

//
{{{
* scala> def mkArray[T : ClassTag](elems: T*) = Array[T](elems: _*)
* mkArray: [T](elems: T*)(implicit evidence$1: scala.reflect.ClassTag[T])Array[T]
*
* scala> mkArray(42, 13)
* res0: Array[Int] = Array(42, 13)
*
* scala> mkArray("Japan","Brazil","Germany")
* res1: Array[String] = Array(Japan, Brazil, Germany)
* }}}

作业:
阅读Spark源码 RDD、HadoopRDD、SparkContext、Master、Worker的源码,
并分析里面使用的所有的模式匹配和类型参数的内容,  
从http://weibo.com/ilovepains获取代码 并完成作业。



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值