我在Scala中为Hbase编写mapreduce作业时遇到了这个奇怪的问题。问题是我的scala类让我们说ScalaMapReducer必须扩展下面的类 http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapper.html
但是当我这样做并“覆盖”map方法(继承表格超类MapMapper的Mapper)时,scala抱怨错误'map overrides nothing'并且无法编译,而我可以在Java中没有任何问题。< / p>
我找到了以下解决方法:
1)定义一个Dummy Java类,它扩展TableMapper类并使用一些空实现覆盖map。现在从scala扩展这个Dummy类。
2)我在goole上发现了这个 workaround 它定义了Mappers特征。
虽然我猜这可能与内部课程有关但我真的没有任何线索和解释。
(这是一般的Scala问题)
修改: 我的scala类中的示例代码
class ScalaMapReducer extends TableMapper[Text,IntWritable]
{
override def map(row:ImmutableBytesWritable,result:Result,context:Context):Unit =
{
//..some code
}
}
答案 0 :(得分:4)
错误地图覆盖任何内容几乎总是因为地图中的键,值类型不匹配而减少定义。双重检查,一些示例代码可能有助于更好的调试。
答案 1 :(得分:4)
根据提供的信息(即没有代码!),您最有可能发生的错误(并且已经制作了一个错误)是错误使用类型参数之一。例如,如果接口定义了一个方法:
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
)