Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 带替代项的重载方法值Sin_Scala_Apache Spark - Fatal编程技术网

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

我一直在为家庭作业编写一些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 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
,您不需要自己定义它