3

Scala で Hbase の mapreduce ジョブを作成しているときに、この奇妙な問題に直面しました。問題は、私のscalaクラスがScalaMapReducerが次のクラスを拡張する必要があると言うことです http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableMapper.html

しかし、私がそうして map メソッド (TableMapper の継承された形式のスーパークラス Mapper) を「オーバーライド」すると、scala は「map overrides nothing」というエラーで不平を言い、コンパイルに失敗しますが、Java では問題なくコンパイルできます。

次の回避策を見つけました。

1) TableMapper クラスを拡張するダミー Java クラスを定義し、空の実装でマップをオーバーライドします。そして今、scala からこの Dummy クラスを拡張します。

2) これは、マッパーの特性を定義する goole の回避策で見つけました。

これは内部クラスと関係があるかもしれないと推測していますが、これ以上の手がかりと説明はありません。

(これは一般的な Scala の質問であることを意図しています)

編集:私のscalaクラスからのサンプルコード、

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

2 に答える 2

4

提供された情報 (つまり、コードなし) に基づい作成した (そして作成した) 最も可能性の高いエラーは、型パラメーターの誤用の 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)

于 2012-05-29T20:23:16.920 に答える
4

ほとんどの場合、エラーマップは何も上書きしません。これは、ほとんどの場合、マップ内のキー、値の型の不一致と、定義の削減が原因です。再確認してください。いくつかのサンプル コードも、デバッグの改善に役立つ可能性があります。

于 2012-05-29T18:40:50.937 に答える