import org.apache.spark.api.java.JavaRDD
import org.apache.spark.rdd.RDD
import scala.reflect.ClassTag
class TestRDD[T: ClassTag](rdd: RDD[T]) extends JavaRDD(rdd)
此语句可从控制台接受。但是在编译时会抛出以下错误:
No ClassTag available for T
[error] class TestRDD[T: ClassTag](rdd: RDD[T]) extends JavaRDD(rdd)
[error] ^
[error] one error found
[error] (jobs/it:compileIncremental) Compilation failed
答案 0 :(得分:8)
我想你想要这个:
class TestRDD[T](rdd: List[T])(implicit c: ClassTag[T]) extends JavaRDD(rdd)
使用implicit
自动隐含通用 T 的ClassTag
。
答案 1 :(得分:2)
这是令人尴尬的解决方案:
class TestRDD[T: ClassTag](rdd: RDD[T]) extends RDD[T](rdd: RDD[T])
答案 2 :(得分:1)
由于jvm模板类型擦除,编译器无法从T
获取rdd
的类型信息。
但是T
的类型信息存储在课程RDD
中,也许您可以从T
类
RDD
的classtag