вычисление расстояния между двумя точками с помощью scala - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть DATAFRAME:

+----------+----------+
| longitude|  latitude|
+----------+----------+
|-7.1732833|32.0414966|
|-7.1732844|32.0414406|
|-7.1732833|32.0414966|
|-7.1732833|32.0414966|
|-7.1732833|32.0414966|
|-7.1732833|32.0414966|

Я хочу вычислить расстояние между точкой и точкой преемника, например:

distance between (-7.1732833,32.0414966) et (-7.1732844,32.0414406)

код, который я сделал:

def haversine_distance(longitude1 : Double,latitude1 : Double,longitude2 : Double,latitude2 : Double) : Double= {

  val R = 6372.8;
  val dlat = math.toRadians(latitude2 - latitude1);
  val dlog = math.toRadians(longitude2 - longitude1);
  val a = math.sin(dlat / 2) * math.sin(dlat / 2) + math.cos(math.toRadians(latitude1)) * math.cos(math.toRadians(latitude2)) * math.sin(dlog / 2) * math.sin(dlog / 2)
  val c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
  val distance = R * c;
  return distance

}

Мой вопрос: как просмотреть кадр данных, чтобы я мог вызвать функцию haversine_distance, используя координаты долготы и широты кадра данных. Благодаря.

1 Ответ

1 голос
/ 27 февраля 2020

Попробуйте разобраться с этим вопросом - Spark DataFrames: объединение двух последовательных строк

Вы не можете применить udf к нескольким строкам напрямую, поэтому вам придется использовать оконную функцию , чтобы объединить последовательные строки, получая DF как:

+----------+----------+----------+----------+
| long1    |  lat1    | long2    |  lat2    |
+----------+----------+----------+----------+
|-7.1732833|32.0414966|-7.1732844|32.0414406|
|-7.1732844|32.0414406|-7.1732833|32.0414966|
|-7.1732833|32.0414966|-7.1732833|32.0414966|

И тогда вы можете применить udf, который вы описали.

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