Как оптимизировать код pysapark для вычисления расстояния пользователем? - PullRequest
0 голосов
/ 30 марта 2020

Я хочу вычислить среднее расстояние, которое составляет ID в каждом zone. Я просыпаюсь в pyspark и использую geospark.

Моя таблица выглядит так:

+--------------------+--------+----------+--------------------+--------------------+
|                  ID|    zone|      date|               point|              point1|
+--------------------+--------+----------+--------------------+--------------------+
|04607f5b-746e-455...|00295753|2020-03-18|POINT (-80.161590...|POINT (-80.161590...|
|05df916c-6269-485...|01383864|2020-03-17|POINT (-95.581115...|POINT (-95.581115...|
|1973aa17-863f-4de...|01383847|2020-03-17|POINT (-96.864837...|POINT (-96.864837...|
|1bba1026-dcb3-42f...|00465266|2020-03-17|POINT (-95.823860...|POINT (-95.823860...|
|2a16bc8c-a529-42e...|01266994|2020-03-18|POINT (-101.24329...|POINT (-101.24329...|
|352b142f-616e-46b...|01605066|2020-03-17|POINT (-105.73150...|POINT (-105.73150...|
|66952620-0cc2-4ba...|01383943|2020-03-17|POINT (-96.226104...|POINT (-96.226104...|
|7e901a60-9f16-4a9...|01383886|2020-03-19|POINT (-95.496803...|POINT (-95.496803...|
|80fdf1e3-92ca-4b1...|01383813|2020-03-16|POINT (-97.661605...|POINT (-97.661605...|
|81f3eb49-ef3f-48f...|00066975|2020-03-18|POINT (-93.562011...|POINT (-93.562011...|
+--------------------+--------+----------+--------------------+--------------------+

Я хотел бы вычислить сумму расстояния, пройденного пользователями в каждая зона и общее количество отдельных пользователей для каждой зоны в каждый день. Я использую geospark, и я могу выполнять простые запросы, подобные этому

queryDistances = """
        SELECT ID, date,
        ST_Distance(point, point1) as distance
        FROM myTable
    """

Я хотел бы измерить расстояние между point и point1 и сделать среднее расстояние на ID на date для каждой зоны и общее количество различных ID в день на zone.

Я бы хотел таблицу типа

    zone        date        avg(distance)   tot(users)
  00295753    2020-03-18       5.5              74
  01383864    2020-03-17       7.3              117

1 Ответ

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

вам нужно поиграть с "группой" некоторое время. Напишите запрос как этот

select ID, date, AVG(ST_DISTANCE(point,point1)) as avg, count(*) as total
from myTables 
group by ID,Zone,Date
...