【问题标题】:How to use sqrt on Double in Spark Scala如何在 Spark Scala 中的 Double 上使用 sqrt
【发布时间】:2019-04-15 04:12:57
【问题描述】:

我正在尝试在 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)

我应该如何解决?

【问题讨论】:

    标签: scala apache-spark apache-zeppelin


    【解决方案1】:

    问题是您正在使用sqrt 中定义的Spark SQL 函数。此函数应仅用作 Spark SQL DSL 的一部分(在选择、聚合等中)。 它采用ColumnString 作为参数,但您试图传递Double。 而是使用在scala.math 包中定义的sqrt 函数:

    val root_mean_sqr_err = math.sqrt(mean_sqr_err)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2016-08-27
      • 2020-07-15
      • 2016-02-03
      相关资源
      最近更新 更多