2012-05-29 49 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