类型不匹配,预期((Double,Double))=>布尔值,实际值((Double,Double))=>任意

时间:2016-05-03 09:44:02

标签: scala apache-spark

我有以下两个由于3个错误而无法编译的函数:

  1. RegressionMetricsCannot resolve constructor
  2. _.nonEmptyType mismatch, expected ((Double,Double))=>Boolean, actual ((Double,Double))=>Any enter image description here

  3. reduce(_+_)Cannot resolve symbol +

  4. 代码:

    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
      }
    

1 个答案:

答案 0 :(得分:0)

  

reduce(func):   返回单个元素RDD的新DStream   使用a聚合源DStream的每个RDD中的元素   function func(接受两个参数并返回一个)。该   函数应该是关联的,以便可以并行计算。

因此,calculateRMSE的正确签名应为:

def calculateRMSE(output: DStream[(Double, Double)]): DStream[Double]