隐式转换的作用:偷偷的对某一个类进行增强(添加某一个方法)
隐式转换通用格式
1、通常需要一个增强的类,例如RichRDD
2、一个已经存在的类,例如RDD代码演示
增强的类
package com.soul.implict
import org.apache.spark.rdd.RDD
/**
* 为RDD添加一个打印数据的增加类
*/
class RichRDD[T](var rdd: RDD[T]) {
def printInfo(flag: Int): Unit = {
if (flag == 0) {
rdd.collect().foreach(println)
}
}
}
为RDD添加这个增强类的功能
package com.soul.implict
import org.apache.spark.rdd.RDD
object ImplictAspect {
implicit def rdd2RichRDD[T](rdd: RDD[T]):RichRDD[T]= new RichRDD[T](rdd)
}
- 通用公式为
implicit def <已存在的类>2<增强的类>(传进来存在类):返回增强的类 = new 增强的类(传进来存在的类)
- Spark源码中的隐式转换
例如:RDD的ReduceByKey算子就是通过隐式转换获取了PairRDDFunctions的方法
implicit def rddToPairRDDFunctions[K, V](rdd: RDD[(K, V)])
(implicit kt: ClassTag[K], vt: ClassTag[V], ord: Ordering[K] = null): PairRDDFunctions[K, V] = {
new PairRDDFunctions(rdd)
}