2016-01-21 47 views
1
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) 

该声明可从控制台接受。但是在编译时被抛出以下错误:没有ClassTag可用于T

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 

回答

6

得到T的classtag我想你想要这样的:

class TestRDD[T](rdd: List[T])(implicit c: ClassTag[T]) extends JavaRDD(rdd) 

使用implicit自动隐含ClassTag通用T

+0

我收到了同样的错误。 – autodidacticon

1

由于JVM模板类型擦除,编译器不能从rdd得到T类型的信息。

但键入T信息存储在RDD类,也许你可以从RDD

0

嗯,这是尴尬的解决方案:

class TestRDD[T: ClassTag](rdd: RDD[T]) extends RDD[T](rdd: RDD[T]) 
相关问题