【发布时间】:2016-05-02 14:29:48
【问题描述】:
这是我计算均方根误差的函数。但是由于错误Type mismatch issue (expected: Double, actual: Unit),最后一行无法编译。我尝试了许多不同的方法来解决这个问题,但仍然没有成功。有什么想法吗?
def calculateRMSE(output: DStream[(Double, Double)]): 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) HOW TO APPLY SQRT HERE?
}
【问题讨论】:
-
@Yuval Itzchakov:我想计算流数据的均方根误差。也许我尝试完成这项任务的方式是不正确的。如果是这样,我想知道正确的方法,假设输入数据的类型为
DStream[(Double,Double)]。 -
我仍然不确定你在做什么。
-
@eliasah:DStream 包含成对的 Double,例如((5.0, 5.2), (5.1, 5.15)...) 假设对中的第一个元素是实际值,而第二个元素是预测值。我需要做的是使用均方根误差 (RMSE) 度量来计算实际值和预测值之间的误差。当我在流中获得新数据时,RMSE 应该明显改变(即应该使用我的函数
calculateRMSE重新计算)。这不可能吗? -
你想用这个 RMSE 做什么? foreachRDD 不返回任何值
-
这和你之前的问题stackoverflow.com/questions/36978409/…基本一样。但正如@eliasah 所说,您正在遍历每个 RDD,然后将计算结果丢弃,因为 foreach 不会返回值。
标签: scala apache-spark rdd dstream