您的位置:首页 > 编程语言

第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析学习笔记

2015-08-21 21:19 597 查看
第45讲:Scala中Context Bounds代码实战及其在Spark中的应用源码解析学习笔记

本讲主要讲解scala中的上下文界定,

本讲主要内容:

1.Context Bounds代码实战

2.Context Bounds在Spark中的广泛应用。

前面讲到视图界定:T <% V,T到V实际上存在隐式转换,

Int转换为RichInt,RichInt符合类型变量的上界。

所以在scala中推出了[T: Ordering]T是泛型,Ordering也不定是泛型类或泛型接口。

意思是存在一个隐式值Ordering[T]

class Pair_Ordering[T: Ordering](val first: T, val second: T){

def bigger(implicit ordered: Ordering[T] = {

if(ordered.compare(first, second) > 0) first else second

//bigger中有隐式值Ordering[T]

//[T: Ordering]在spark编程中应用非常广泛

}

}

object Context_Bounds {

def main(args: Array[String]){

val pair = new Pair_Ordering("Spark", "Hadoop")

println(pair.bigger)

val pairInt = new Pair_Ordering(3,5)

println(pairInt.bigger)

}

下面是ordering的源码:

trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable{

def tryCompare(x: T, y: T) = Some(Compare(x,y))

def compare(x: T, y: T):Int

}

scala难点:语法糖问题

Comparator有compare方法,实际实现时可以说明xy怎样计算。

隐式值生活在“冥界”,并以一种不可见的方式注入到方法当中

--摘自《快学scala》第21.7节。

以上内容是从王家林老师DT大数据课程第45讲的学习笔记。

DT大数据微信公众账号:DT_Spark

王家林老师QQ:1740415547

王家林老师微信号:18610086859

我的百度网盘共享的DT大数据梦工厂王家林老师第1-90讲的视频内容:http://pan.baidu.com/s/1qWK9CMo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: