Вы должны предоставить точный базовый тип для вашей проекции типа, в вашем случае
Mapper[Key, Entity, NullWritable, NullWritable]#Context
поэтому переопределение setup
будет записано как
override def setup(context: Mapper[Key, Entity, NullWritable, NullWritable]#Context)
Использование можно упростить, введя псевдоним типа
class TestMapper extends AppEngineMapper[Key, Entity, NullWritable, NullWritable] {
type Context = Mapper[Key, Entity, NullWritable, NullWritable]#Context
override def setup(context: Context) = {
// ...
}
}
Если вы хотите написать несколько картографов, вы можете преобразовать это в черту, которую можно смешать с вашей реализацией:
trait SMapper[A,B,C,D] extends Mapper[A,B,C,D] {
type Context = Mapper[A,B,C,D]#Context
}
class TestMapper extends AppEngineMapper[Key, Entity, NullWritable, NullWritable]
with SMapper[Key, Entity, NullWritable, NullWritable] {
override def setup(context: Context) = {
// ...
}
}
или для простого hadoop:
class TestMapper extends SMapper[Key, Entity, NullWritable, NullWritable] {
override def setup(context: Context) = {
// ...
}
}