如何在Scala 2.9.0中实现Hadoop Mapper?
发布时间:2020-12-16 19:15:00 所属栏目:安全 来源:网络整理
导读:当我从2.8.1迁移到 Scala 2.9.0时,除了Hadoop映射器之外,所有代码都是可用的.因为我在路上有一些包装器对象,所以我精炼到下面的例子: import org.apache.hadoop.mapreduce.{Mapper,Job}object MyJob { def main(args:Array[String]) { val job = new Job(ne
当我从2.8.1迁移到
Scala 2.9.0时,除了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] { override def map(key: LongWritable,value: Text,context: Mapper[LongWritable,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]) 失败的调用是在Job对象上调用setMapperClass时.这是该方法的定义: 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中运行良好…… 解决方法
看起来很傻,你可以通过在Job之前定义Mapper来解决这个问题.以下编译:
import org.apache.hadoop._ import org.apache.hadoop.io._ import org.apache.hadoop.conf._ import org.apache.hadoop.mapreduce._ class MyMapper extends Mapper[LongWritable,Text]#Context) { } } object MyJob { def main(args:Array[String]) { val job = new Job(new Configuration()) job.setMapperClass(classOf[MyMapper]) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |