2016-05-13 4 views
1

私はまだScalaのコンテキスト境界に慣れていませんし、contextBoundを満たすジェネリックのreduceByKeyを実行できる関数を作成しようとしています。私の知る限り、私は次のエラーを取得するコンパイルしようとしたとき、これはしかし、動作するはずです理解し 例えばspark reduceByKeyをコンテキスト境界を使ってジェネリックに適用する

def myReduce[K: ClassTag, V: ClassTag: Numeric[V]](in: RDD[(K, V)]): RDD[(K, V)] = { 
    in.reduceByKey{case (v1, v2) => 
    implicityly[Numeric[V]].plus(v1, v2) 
    } 

  1. エラー:数値
  2. エラー:パラメータeの暗黙的な値を見つけることができませんでした数値[V]を型パラメータ

これらの私は理解していないを負いません。 私はどこでも型パラメータを数値[V]に渡していません。また、コンテクストバウンドで自動的に変換の「証拠」をインポートしないでください。

私は代わりに、最終的に数値の代わりに自分の特性を使用することを望んでいました。

編集:

次のように私は明示的に関数内で暗黙のevdienceを書いてみました:

def myReduce[K: ClassTag, V: ClassTag](in: RDD[(K, V)])(implicit ev: V => Numeric[V]): RDD[(K, V)] = { 
    in.reduceByKey{case (v1, v2) => 
    implicityly[Numeric[V]].plus(v1, v2) 
    } 

しかし、私はまだ「エラー:パラメータeの暗黙的な値を見つけることができませんでした:数値」誤差が出。

答えて

1

[OK]をので、私は問題は[V]の数値を指定するだけではなく数値られた問題に

def myReduce[K: ClassTag, V: ClassTag: Numeric](in: RDD[(K, V)]): RDD[(K, V)] = { 
    in.reduceByKey{case (v1, v2) => 
    implicityly[Numeric[V]].plus(v1, v2) 
    } 

を解決しました。 私は今より多くの問題に遭遇しましたが、それは別の日です。

関連する問題