Apache Spark Pivot Query Stuck (PySpark)
У меня есть простые данные как:
+--------------------+-----------------+-----+
| timebucket_start| user| hits|
+--------------------+-----------------+-----+
|[2017-12-30 01:02...| Messi| 2|
|[2017-12-30 01:28...| Jordan| 9|
|[2017-12-30 11:12...| Jordan| 462|
+--------------------+-----------------+-----+
Я пытаюсь повернуть его так, чтобы я получил количество каждого пользователя для каждого временного сегмента,
Итак, мой запрос в PySaprk (с использованием фреймов данных):
user_time_matrix = df.groupBy('timebucket_start').pivot("user").sum('hits')
Теперь этот запрос просто продолжает выполняться все время. Я тоже попробовал это с масштабированным кластером, удвоив размер моего кластера, но с той же проблемой.
Это неправильный запрос? Можно ли оптимизировать, почему не может закончить искра?
1 ответ
Это то же самое, но вы можете попробовать:
import pyspark.sql.functions as F
user_time_matrix = df.groupBy('timebucket_start').pivot("user").agg(F.sum('hits'))
Дайте мне знать, если есть какая-либо ошибка или бесконечный цикл. Также, когда вы используете этот код, пользователи станут ссылкой на столбцы:
Вход:
+----+----------+------+
|hits| time| user|
+----+----------+------+
| 2|2017-12-30| Messi|
| 3|2017-12-30|Jordan|
| 462|2017-12-30|Jordan|
| 2|2017-12-31| Messi|
| 2|2017-12-31| Messi|
+----+----------+------+
Выход:
+----------+------+-----+
| time|Jordan|Messi|
+----------+------+-----+
|2017-12-31| null| 4|
|2017-12-30| 465| 2|
+----------+------+-----+
Я бы посоветовал:
user_time_matrix = df.groupBy('timebucket_start', 'user').sum('hits')
Выход:
+----------+------+---------+
| time| user|sum(hits)|
+----------+------+---------+
|2017-12-31| Messi| 4|
|2017-12-30|Jordan| 465|
|2017-12-30| Messi| 2|
+----------+------+---------+