我正在尝试用 Java 创建一个 customRDD。
RDD转换RDD[(K,V)]
为PairRDDFunctions[K,V]
使用rddToPairRDDFunctions()
.object RDD
我正在尝试对我的CustomJavaRDD
which extends CustomRDD
which 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