Как использовать sqrt на Double в Spark Scala - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь вычислить среднеквадратическую ошибку (RMSE) вручную на Spark (Scala 2.11)

se

Как показано на скриншоте выше, я вычисляю квадратОшибка (SE) для каждой строки

val predicted_with_sqr_err = predicted.withColumn("se", pow(($"medianHouseValue" - $"prediction"), lit(2)))

Затем я вычисляю среднеквадратическую ошибку (MSE)

val sum_se = predicted_with_sqr_err.agg(sum("se")).first.get(0)
val sum_se_double = sum_se.toString.toDouble
val mean_sqr_err = (1.0/predicted_with_sqr_err.count)*sum_se_double 

Все работало нормально.Но когда я пытаюсь получить квадратный корень для вычисления среднеквадратической ошибки (RMSE).

val root_mean_sqr_err = sqrt(mean_sqr_err)

выдает ошибку:

<console>:83: error: overloaded method value sqrt with alternatives:
  (colName: String)org.apache.spark.sql.Column <and>
  (e: org.apache.spark.sql.Column)org.apache.spark.sql.Column
 cannot be applied to (Double)
       val root_mean_sqr_err = sqrt(mean_sqr_err)

sqrt error

Как исправить?

1 Ответ

0 голосов
/ 12 ноября 2018

Проблема в том, что вы используете функцию sqrt, которая определена в Spark SQL.Эта функция должна использоваться только как часть Spark SQL DSL (в выборках, агрегациях и т. Д.).Параметр принимает Column или String, но вы пытаетесь передать Double.Вместо этого используйте функцию sqrt, которая определена в пакете scala.math:

val root_mean_sqr_err = math.sqrt(mean_sqr_err)
...