我一直在玩Scala,尝试使用2.9.1在Scala IDE中编译SMR。自2008年以来,SMR似乎没有受到影响,并且存在许多未解决的编译错误。我坚持的是这一行:
jobConf.setMapRunnerClass(classOf[ClosureMapper[_,_,_,_]]);
因此定义了ClosureMapper:
class ClosureMapper[K1,V1,K2,V2] extends MapRunnable[Writable,Writable,Writable,Writable] {
...
}
我得到的错误是:
type mismatch;
found : java.lang.Class[smr.hadoop.ClosureMapper[_, _, _, _]](classOf[smr.hadoop.ClosureMapper])
required: java.lang.Class[_ <: org.apache.hadoop.mapred.MapRunnable]
所以在我看来,JobConf类的setMapRunnerClass方法正在限制类型参数继承MapRunnable(ClosureMapper所做的),但更具体地说是MapRunnable的 raw 类型,Scala似乎没有升值。
我尝试过以下操作,但出现了不同的错误:
jobConf.setMapRunnerClass(classOf[ClosureMapper]);
那个人提供class ClosureMapper takes type parameters
关于如何让Scala识别原始类型约束的任何想法?
答案 0 :(得分:0)
您可能必须为ClosureMapper
:
jobConf.setMapRunnerClass(classOf[ClosureMapper[_ <: ClosureMapper[_],_ <: ClosureMapper[_],_ <: ClosureMapper[_],_ <: ClosureMapper[_]]]);