2016-05-03 12 views
0

Iによる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 +

コード:

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:testの内部にval metrics = new RegressionMetrics(rdd)を入れても奇妙なことは問題なくコンパイルできます。

UPDATE:私は追加することによって、問題の#1を解決することができた

(Double,Double)RDDへ:

def getRMSE(rdd : RDD[(Double, Double)]) : Double = { 
    val metrics = new RegressionMetrics(rdd) 
    metrics.rootMeanSquaredError 
    } 
+0

スプリットこのライン 'output.filter(_空ではない。).MAP(getRMSE).reduce(_ _ +)'の配列にval = mapped.reduce(...) 'を呼び出し、型を調べます。 –

答えて

0

reduce(func):要素を集約 ことにより、単一要素のRDDSの新しいDSTREAMを返し ファンクションfunc(2つの引数をとり、1つを返す)を使用して、ソースDStreamの各RDDで 関数は、並列に計算できるように結合的でなければなりません。

したがって、calculateRMSEための右署名がなければならない:

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

私はあなたの言うことを試しました。問題は同じです。私の更新を見て、私はスクリーンショットを投稿しました – Klue

+0

doubleのタプルでnonEmptyを呼び出すことはできません。あなたはこのフィルタリングによって何を達成したいですか? –

+0

M y質問は、このスレッドの答えを参照してください:http://stackoverflow.com/questions/36984923/how-to-solve-type-mismatch-issue-expected-double-actual-unit 私が 'filter'を使って理解したように私は空のRDDをフィルタリングすることができます... – Klue