Scala 带替代项的重载方法值Sin
我一直在为家庭作业编写一些Scala代码,在使用内置的sin函数时遇到了一个奇怪的错误,这对我来说没有多大意义Scala 带替代项的重载方法值Sin,scala,apache-spark,Scala,Apache Spark,我一直在为家庭作业编写一些Scala代码,在使用内置的sin函数时遇到了一个奇怪的错误,这对我来说没有多大意义 val pi = 3.14159265 val REarth = 6371.0 // kilometers def toRadians(x: Double): Double = x * pi / 180.0 def haversine(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double = { var
val pi = 3.14159265
val REarth = 6371.0 // kilometers
def toRadians(x: Double): Double = x * pi / 180.0
def haversine(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double = {
var lt1 = toRadians(lat1)
var lt2 = toRadians(lat2)
var dlat = toRadians(lat2 - lat1)
var dlon = toRadians(lon2 - lon1)
var x = sin(dlat/2)
var a = x * x + cos(lt1) * cos(lt2) * sin(dlon/2)**2
var c = 2 * atan2(sqrt(a), sqrt(1-a))
return REarth * c
}
import org.apache.spark.sql.functions.udf
val haver = udf(haversine _)
运行此代码时,返回以下错误:
<console>:37: error: overloaded method value sin with alternatives:
(columnName: String)org.apache.spark.sql.Column <and>
(e: org.apache.spark.sql.Column)org.apache.spark.sql.Column
cannot be applied to (Double)
var x = sin(dlat/2)
^
:37:错误:重载方法值sin,并带有可选项:
(columnName:String)org.apache.spark.sql.Column
(e:org.apache.spark.sql.Column)org.apache.spark.sql.Column
无法应用于(双精度)
var x=sin(dlat/2)
^
我真的不确定到底发生了什么,就我所知,sin函数应该正常工作,我觉得我遗漏了一些明显的东西。任何指导都将不胜感激。您可能已经从
org.apache.spark.sql.functions
导入了sin
、cos
等(它们包含列
)。如果需要scalas数学函数,请在haversine
内部编写import math.\ucode>,或使用m̀ath.sin
,math.cos
还要注意,math
提供了toRadians
和Pi
,您不需要自己定义它