如何在 Spark Scala 中对 Double 使用 sqrt
How to use sqrt on Double in Spark Scala
我正在尝试在 Spark (Scala 2.11) 上手动计算均方根误差 (RMSE)
如上图所示,我计算了每一行的平方误差 (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)
我该如何解决?
问题是您使用的是 Spark SQL
中定义的 sqrt
函数。此函数应仅用作 Spark SQL DSL 的一部分(在选择、聚合等中)。
它需要 Column
或 String
作为参数,但您试图传递 Double
。
而是使用在 scala.math
包中定义的 sqrt
函数:
val root_mean_sqr_err = math.sqrt(mean_sqr_err)
我正在尝试在 Spark (Scala 2.11) 上手动计算均方根误差 (RMSE)
如上图所示,我计算了每一行的平方误差 (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)
我该如何解决?
问题是您使用的是 Spark SQL
中定义的 sqrt
函数。此函数应仅用作 Spark SQL DSL 的一部分(在选择、聚合等中)。
它需要 Column
或 String
作为参数,但您试图传递 Double
。
而是使用在 scala.math
包中定义的 sqrt
函数:
val root_mean_sqr_err = math.sqrt(mean_sqr_err)