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|
+----------+------+---------+
Другие вопросы по тегам