7
当我从2.8.1迁移到Scala 2.9.0时,除了Hadoop映射器之外,所有的代码都是可用的。因为我在路上,有一些包装对象,我提炼到下面的例子:如何在Scala 2.9.0中实现Hadoop Mapper?
import org.apache.hadoop.mapreduce.{Mapper, Job} object MyJob { def main(args:Array[String]) { val job = new Job(new Configuration()) job.setMapperClass(classOf[MyMapper]) } } class MyMapper extends Mapper[LongWritable,Text,Text,Text] { override def map(key: LongWritable, value: Text, context: Mapper[LongWritable,Text,Text,Text]#Context) { } }
当我在2.8.1运行它,它运行得很好(我有足够的生产代码2.8.1在2.9.0,我得到以下编译错误:
error: type mismatch;
found : java.lang.Class[MyMapper](classOf[MyMapper])
required: java.lang.Class[_ <: org.apache.hadoop.mapreduce.Mapper]
job.setMapperClass(classOf[MyMapper])
发生故障的呼叫当我打电话setMapperClass作业对象下面是方法的定义:
public void setMapperClass(java.lang.Class<? extends org.apache.hadoop.mapreduce.Mapper> cls) throws java.lang.IllegalStateException { /* compiled code */ }
定义Ø f Mapper类本身是这样的:
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
有没有人对我做错了什么感觉?在我看来,这种类型基本上是正确的:MyMapper扩展了Mapper,并且该方法需要扩展Mapper的东西。它在2.8.1中效果很好...
FWIW,我也没有看到一个错误。确保你使用的是2.9.0.Final,而不是一些早期的RC。如果您确实在使用Final,请检查票证数据库中的内容,或者在此处打开票证。 – 2011-05-17 16:06:59
非常感谢丹尼尔!我在这里输入了一张票:https://lampsvn.epfl.ch/trac/scala/ticket/4603 – 2011-05-17 18:36:57
Scala已迁移到Jira,所以现在问题在:https://issues.scala-lang.org/browse/ SI-4603 – 2011-05-18 21:39:11