没有ClassTag可用于T

时间:2016-01-21 05:31:58

标签: scala

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

3 个答案:

答案 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