我有以下两个由于3个错误而无法编译的函数:
RegressionMetrics
:Cannot resolve constructor
_.nonEmpty
:Type mismatch, expected ((Double,Double))=>Boolean,
actual ((Double,Double))=>Any
reduce(_+_)
:Cannot resolve symbol +
。
代码:
import org.apache.spark.mllib.evaluation.RegressionMetrics
//..
def getRMSE (rdd: RDD): Double = {
val metrics = new RegressionMetrics(rdd)
metrics.rootMeanSquaredError
}
def calculateRMSE(output: DStream[(Double, Double)]): Double = {
output.filter(_.nonEmpty).map(getRMSE).reduce(_+_)
}
test("Test1") {
// do some data preprocessing
// call the function calculateRMSE
}
知道如何修复这些错误吗?
P.S:奇怪的是,当我将val metrics = new RegressionMetrics(rdd)
放入test
时,编译没有任何问题。
更新:
我能够通过将(Double,Double)
添加到RDD
来解决问题#1:
def getRMSE(rdd : RDD[(Double, Double)]) : Double = {
val metrics = new RegressionMetrics(rdd)
metrics.rootMeanSquaredError
}
答案 0 :(得分:0)
reduce(func): 返回单个元素RDD的新DStream 使用a聚合源DStream的每个RDD中的元素 function func(接受两个参数并返回一个)。该 函数应该是关联的,以便可以并行计算。
因此,calculateRMSE的正确签名应为:
def calculateRMSE(output: DStream[(Double, Double)]): DStream[Double]