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

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

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

本讲主要内容:

1.Context Bounds代码实战

2.Context BoundsSpark中的广泛应用。

 

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

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

所以在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难点:语法糖问题

 

 

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

 

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

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

 

 

以上内容是从王家林老师DT大数据课程第45讲的学习笔记。
DT大数据微信公众账号:DT_Spark  

王家林老师QQ:1740415547 

王家林老师微信号:18610086859
我的百度网盘共享的DT大数据梦工厂王家林老师第1-90讲的视频内容:http://pan.baidu.com/s/1qWK9CMo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值