第43讲:Scala中类型变量Bounds代码实战及其在Spark中的应用源码解析学习笔记
scala中的类型变量bounds代码实战及其在spark中的应用
类型变量的上界与下界
在spark中如何运用类型变量的界定的。
上讲讲了泛型 类
//class Pair[T](val first : T, val second : T){
//不定义T为comparable的话,就不知道T的类型,
//所以也不知道T是否有compareTo方法。故编译器会报错。
class Pair[T <: Comparable[T]](val first : T, val second : T){
//Pair是泛型类,类型为T的成员具体方法compareTo
//对T类型的限定是<:,即T必须是Comparable[T]类型的子类
//这样的话T就一定有CompareTo方法。
//T <: Comparable[T]表明了T的上界。
def bigger = if(first.compareTo(second) > 0)first else second
}
class Pair_Lower_Bound[T](val first : T, val second:T){
def replaceFirst[R >: T](newFirst:R)= new Pair_Lower_Bound[R](newFirst,second)
//R是T的父类,T是R的子类,
//从R角度看T是R的下界,从T类型看,R是T类型的上界
//假设T是student类型,Person可以代替student,Person就是student的父类,
//
}
object Type_Variables_Bounds{
def main(args: Array[String]){
val pair = new Pair("Spark","Hadoop")
//结果为Spark,
println(pair.bigger)
}
}
def hadoopFile[K, V, F <: InputFormat[K,V]]
(path: String, minPartitions: Int)
(implicit km: ClassTag[K],vm:ClassTag[V], fm: ClassTag[F]): RDD[(K,V)] = withScope {
hadoopFile(path,
fm.runtimeClass.asInstanceOf[Class[F]],
km.runtimeClass.asInstanceOf[Class[K]],
vm.runtimeClass.asInstanceOf[Class[V]],
minPartitions)
}
//hadoopFile是读取hadoop文件的。
//K, V, F <: InputFormat[K,V]表明K, V, F都必须是InputFormat[K,V]类型的子类。
以上内容是从王家林老师DT大数据课程第43讲的学习笔记。
DT大数据微信公众账号:DT_Spark
王家林老师QQ:1740415547
王家林老师微信号:18610086859
scala第43讲视频观看链接:
http://yun.baidu.com/s/1eQjga2I
我的百度网盘共享的DT大数据梦工厂王家林老师第1-85讲的视频内容:http://pan.baidu.com/s/1qWK9CMo