Ich analysiere Streaming Spark, und es funktioniert gut außer Drucken RMSE. Es gibt also die Vorhersagen output.print()
aus, es zeigt jedoch nicht RMSE. Irgendeine Idee?Spark-Streaming druckt einige Daten nicht
def calculateRMSE(output: DStream[(Double, Double)], n: DStream[Long]): Double = {
var summse = 0.0
output.foreachRDD { rdd =>
rdd.map {
case pair: (Double, Double) =>
val err = math.abs(pair._1 - pair._2)
err*err
}.foreach(summse += _)
}
math.sqrt(summse)
}
//..
val trainingData = ssc.textFileStream("file:///home/gosper/Desktop/data/streaming/train").map(LabeledPoint.parse).cache()
val testData = ssc.textFileStream("file:///home/gosper/Desktop/data/streaming/test").map(LabeledPoint.parse)
model.trainOn(trainingData)
val output = model.predictOnValues(testData.map(lp => (lp.label, lp.features)))
output.print()
val rmse = calculateRMSE(output,testData.count())
println(s"RMSE = $rmse")
ssc.start()
ssc.awaitTermination()
Danke. Ich habe das versucht, aber es sieht so aus, als wäre 'summse'' Unit' anstatt 'Double':' val summse = output.foreachRDD {rdd => rdd.map { Fallpaar: (Double, Double) => val err = Math.abs (pair._1 - pair._2) err * err } .sum() } math.sqrt (summse) ' – Klue
erwägen sie es wie folgt aus: ' val summse = output.map {Fallpaar: (Double, Double) => val err = math.abs (Paar._1 - Paar._2); err * err}} .reduce (_ + _) val res = math.sqrt (summse) ' – akivanov
Es besagt, dass' math.sqrt' 'Double' statt' DStream [Double] 'erwartet, das ist jetzt der Typ von 'summse'. Außerdem sollte wahrscheinlich '} .reduce' statt'}} .reduce' sein. – Klue