Перегруженный метод Значение Sin С альтернативами - PullRequest
0 голосов
/ 07 апреля 2020

Я работал над кодом 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)
                   ^

Я действительно не уверен, что происходит, насколько я могу сказать, что функция sin должна работать должным образом, и я чувствую, что Я упускаю что-то очевидное. Любое руководство будет оценено.

1 Ответ

1 голос
/ 07 апреля 2020

у вас, вероятно, sin, cos et c, импортированных из org.apache.spark.sql.functions (они принимают Column). Если вам нужны математические функции скаля, напишите import math._ внутри haversine или используйте m̀ath.sin, math.cos

Обратите внимание, что math обеспечивает toRadians, а также Pi, вы не это нужно определить самому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...