scala - 如何在 Spark Scala 中的 Double 上使用 sqrt
问题描述
我正在尝试在 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)
我应该如何解决?
解决方案
问题是您使用sqrt
的是在Spark SQL
. 此函数应仅用作 Spark SQL DSL 的一部分(在选择、聚合等中)。它采用Column
orString
作为参数,但您试图传递Double
. 而是使用包sqrt
中定义的函数scala.math
:
val root_mean_sqr_err = math.sqrt(mean_sqr_err)
推荐阅读
- javascript - 在选择选项中动态隐藏所选值(性能问题)
- android - 使用 LinearLayout 向 ListView 添加标题,Listview 被推离屏幕(Xamarin Android)
- ios - 尝试在 WKWebview 中加载 url 但在 SFSafariViewController 或 iOS 中的外部 safari 中工作正常时出现会话过期错误
- ruby-on-rails - 使用属性 api 验证数值
- c++ - 关于模板的使用
- java - 如何查找哪个用户正在更新项目并在 sonarqube 上进行项目分析报告
- javascript - 使用 javascript 对 Json 对象进行 Json 模式验证
- sql - SQL 查询 - 超过阈值的聚合总和
- bash - 如何从我的 git repos 中彻底删除所有远程分支
- java - 当一个方法具有泛型类型参数而另一个具有非泛型参数时,java如何确定将调用哪个重载方法?