2016-05-02 49 views
0

對於流數據DStream[(Double, Double)],我該如何估計均方根誤差?看到我的代碼如下。行math.sqrt(summse)是我有問題(代碼不編譯):如何使用math.sqrt DStream [(Double,Double)]?

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。預期:Double,Actual:Unit' – Klue

+0

你想做什麼?在什麼時間點計算DStream的RMSR? DStream是無限的流,所以你不能指望執行'f(DStream)'操作並從中獲得標量值,因爲結果將取決於時間。 – maasg

回答

1

方法foreachRDD(...)返回單元,從而這是預期的。根據文檔,結果被寫回到這個(輸出)DStream。我想這是你必須申請sqrt。

+0

我不知道我明白你的意思。你可以添加一個例子嗎?如何將sqrt應用於給定函數內的輸出? (顯然它不應該是'math.sqrt(輸出)') – Klue

+0

@Klue添加一個類型註釋到你的'summse',它應該變得清晰。 'math.sqrt'需要一個'Double' –

相關問題