2012-05-29 51 views
3

我在为Scala中的Hbase编写mapreduce作业时遇到了这个奇怪的问题。问题是,我的Scala类可以说ScalaMapReducer具有扩展以下类 http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapper.html斯卡拉'没有重写'错误

但是,当我这样做,“覆盖”的图法(TableMapper的遗传形式的超映射),斯卡拉错误“地图覆盖抱怨什么都没有“,并且不能编译,而我可以在Java中没有任何问题的情况下进行编译。

我发现了以下解决方法:

1)定义它扩展了TableMapper类虚拟Java类,并覆盖了一些空的实现地图。现在从scala扩展这个Dummy类。

2)我在goole workaround 上找到了它,它定义了一个Mappers特性。

虽然我猜这可能与内部类有关,但我真的没有更多的线索和解释。

这是为了是一般斯卡拉问题

编辑:从我的Scala类 示例代码,

class ScalaMapReducer extends TableMapper[Text,IntWritable] 
{ 
    override def map(row:ImmutableBytesWritable,result:Result,context:Context):Unit = 
    { 
     //..some code 
    } 
} 
+2

请问您可以添加一些示例代码来说明错误吗? – drexin

回答

4

错误地图覆盖没什么几乎总是因为地图中的键和值类型不匹配并且减少了定义。仔细检查一下,还有一些示例代码可能有助于更好的调试。

3

根据提供的信息(即没有代码!),您所做的最可能的错误(和您已将设为1)是错误使用类型参数之一。例如,如果接口定义了一个方法:

public interface I<T> { public void doStuff(T t); } 

也许你可能已经实现如下:

class I0 extends I[String] { override def doStuff[String](String s) } 
               // ^^^^^^ ^^^^^^ 
               // oops, a type parameter 

虽然因为你已经不是我们显示的代码,我不能肯定。如果你是使用IDE,为什么不要求它填写一个空白的实现? (使用IDEA,这是CTRL-i