Как реализовать Hadoop Mapper в Scala 2.9.0?

Когда я переходил на Scala 2.9.0 с 2.8.1, весь код был работоспособен, за исключением модулей отображения Hadoop. Поскольку у меня на пути было несколько объектов-оберток, я перешел к следующему примеру:

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 для объекта Job. Вот определение этого метода:

public void setMapperClass(java.lang.Class<? extends org.apache.hadoop.mapreduce.Mapper> cls) throws java.lang.IllegalStateException { /* compiled code */ }

Определение самого класса Mapper следующее:

public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

Есть ли у кого-нибудь ощущение того, что я делаю не так? Мне кажется, что тип в корне правильный: MyMapper расширяет Mapper, и метод хочет что-то, что расширяет Mapper. И в 2.8.1 отлично работает ...

7
задан Chris B 17 May 2011 в 08:32
поделиться