Как проложить расстояния в писпарке? - PullRequest
0 голосов
/ 28 марта 2020

У меня есть таблица, подобная следующей:

+--------------------+--------------------+-------------------+
|                  ID|               point|          timestamp|
+--------------------+--------------------+-------------------+
|679ac975acc4bdec9...|POINT (-73.267631...|2020-01-01 17:10:49|
|679ac975acc4bdec9...|POINT (-73.271446...|2020-01-01 02:12:31|
|679ac975acc4bdec9...|POINT (-73.265991...|2020-01-01 17:10:40|
|679ac975acc4bdec9...|POINT (-73.271446...|2020-01-01 02:54:15|
|679ac975acc4bdec9...|POINT (-73.265609...|2020-01-01 17:10:24|
+--------------------+--------------------+-------------------+

Я хочу вычислить расстояние между всеми точками, но я не могу это сделать.

Однако я могу вычислить расстояние от каждой точки в столбце point до указанной c точки следующим образом

distances = spark.sql(
    """
        SELECT ID, timestamp, point,
        ST_Distance(point, ST_PointFromText('-74.00672149658203, 40.73177719116211', ',')) as distance
        FROM myTable
    """).show(5)



+--------------------+-------------------+--------------------+------------------+
|                  ID|          timestamp|               point|          distance|
+--------------------+-------------------+--------------------+------------------+
|679ac975acc4bdec9...|2020-01-01 17:10:49|POINT (-73.267631...|0.7485722629444987|
|679ac975acc4bdec9...|2020-01-01 02:12:31|POINT (-73.271446...|0.7452303978930688|
|679ac975acc4bdec9...|2020-01-01 17:10:40|POINT (-73.265991...|0.7503403834426271|
|679ac975acc4bdec9...|2020-01-01 02:54:15|POINT (-73.271446...|0.7452310193408604|
|679ac975acc4bdec9...|2020-01-01 17:10:24|POINT (-73.265609...|0.7511492495935203|
+--------------------+-------------------+--------------------+------------------+

Как вычислить расстояние от одной точки в строке до следующей?

1 Ответ

0 голосов
/ 28 марта 2020

Если я правильно понимаю проблему, вы хотите собрать смежные различия между строками в столбце point. Я полагаю, что вы можете выполнить это sh с помощью функции lag (https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark. sql .functions.lag ) и Window (http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=window#pyspark. sql .Window ):

from pyspark.sql.functions import lag, col
from pyspark.sql.window import Window

window = Window.partitionBy().orderBy("ID")
df = df.withColumn('distance', col('point') - lag(col('point')).over(window))
...