【发布时间】:2016-05-03 20:28:49
【问题描述】:
我有以下两个函数由于3个错误而无法编译:
-
RegressionMetrics:Cannot resolve constructor _.nonEmpty:Type mismatch, expected ((Double,Double))=>Boolean, actual ((Double,Double))=>Anyreduce(_+_):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
}
【问题讨论】:
-
将此行 `output.filter(.nonEmpty).map(getRMSE).reduce(_+)` 拆分为一系列
val分配 (val filtered = output.filter(...); val mapped = filtered.map(...); val reduced = mapped.reduce(...)看看类型。我想你会发现它们不是你所期望的。
标签: scala apache-spark