Java で customRDD を作成しようとしています。
RDDは、 で定義されているScala 暗黙関数を使用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)
}
}
CustomRDD.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