我正在尝试用 Java 创建一个 customRDD。
RDD转换RDD[(K,V)]为PairRDDFunctions[K,V]使用rddToPairRDDFunctions().object RDD
我正在尝试对我的CustomJavaRDDwhich extends CustomRDDwhich extends做同样的事情RDD。
现在它应该rddToCustomJavaRDDFunctions()在遇到时调用隐式函数CustomJavaRDD[(K,V)],但由于某种原因它仍然会去rddToPairRDDFunctions()。
我究竟做错了什么?
RDD.scala
class RDD[T]
object RDD {
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)
}
}
自定义RDD.scala
abstract class CustomRDD[T] extends RDD[T]
object CustomRDD {
implicit def rddToCustomJavaRDDFunctions[K,V](rdd: CustomJavaRDD[(K,V)]):
PairCustomJavaRDDFunction[K,V] = {
new PairCustomJavaRDDFunctions[K,V](rdd)
}
}
PairCustomJavaRDDFunctions.scala
class PairCustomJavaRDDFunctions[K: ClassTag, V: ClassTag](self: CustomRDD[(K, V)])
(implicit ord: Ordering[K] = null) {
def collectAsMap() = ???
}
没有错误;程序编译成功,但假设我有data: RDD一个CustomJavaRDD.
data.collectAsMap()
在运行时它转换data为PairRDDFunctions; 即它对RDD.scalarddToPairRDDFunctions中定义的隐式调用。
但它应该调用CustomRDD.scalarddToCustomJavaRDDFunctions中定义的并将其转换为.PairCustomJavaRDDFunctions