2016-05-02 8 views
0

ストリーミングデータDStream[(Double, Double)]の場合、平均平方根誤差をどのように見積もりますか?以下の私のコードを見てください。DStream [(Double、Double)]にmath.sqrtを使用するには?

def calculateRMSE(output: DStream[(Double, Double)], n: DStream[Long]): Double = { 
     val summse = output.foreachRDD { rdd => 
      rdd.map { 
       case pair: (Double, Double) => 
       val err = math.abs(pair._1 - pair._2); 
       err*err 
      }.reduce(_ + _) 
     } 
     math.sqrt(summse) 
    } 

UPDATE: コードはコンパイルされない:Cannot resolve reference sqrt with such signature. Expected: Double, Actual: Unit

+1

あなたの問題は何ですか?コンパイルしないか、ランタイムフォルトまたは間違った値ですか? – thoredge

+0

@thoredge:コードはコンパイルされません: 'このような署名で参照sqrtを解決できません。期待:ダブル、実際:ユニット ' – Klue

+0

何をしたいですか?どの時点でDStreamのRMSEを計算しますか? DStreamは無限のストリームなので、結果は時間に依存するので、 'f(DStream)'演算を実行してスカラー値を取得することは期待できません。 – maasg

答えて

1

方法foreachRDD(...)はユニットをので返し線math.sqrt(summse)私は問題がある場合(コードはコンパイルされない)でありますそれは期待される。ドキュメントによると、結果はこの(出力)DStreamに書き戻されます。私はあなたがsqrtを適用する必要があると思う。

+0

私はあなたが正確に何を意味しているか分かりません。あなたは例を追加できますか?与えられた関数の中でsqrtを出力するには? (明らかに 'math.sqrt(output)'ではない) – Klue

+0

@Klueはあなたの 'summse'に型名を追加します。 'math.sqrt'は' Double'を必要とします –

関連する問題