2016-05-02 42 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' –

相关问题