Как объединить данные из фрейма данных - PullRequest
0 голосов
/ 06 июля 2018

У меня есть одна таблица с большим количеством типов данных, и у некоторых данных есть одна информация, которая действительно важна для анализа остальных данных. Это таблица, которая у меня есть

    name   |player_id|data_ms|coins|progress |
 progress  |  1223   | 10    |     |     128 |
 complete  |  1223   | 11    |  154|         |
 win       |  1223   | 9     |  111|         |
 progress  |  1223   | 11    |     |     129 |
 played    |  1111   | 19    |  141|         |
 progress  |  1111   | 25    |     |     225 |

Это таблица, которую я хочу

    name    |player_id|data_ms|coins|progress |
 progress   |  1223   | 10    |     |     128 |
 complete   |  1223   | 11    |  154|     128 |
 win        |  1223   | 9     |  111|     129 |
 progress   |  1223   | 11    |     |     129 |
 played     |  1111   | 19    |  141|     225 |
 progress   |  1111   | 25    |     |     225 |

Мне нужно найти прогресс игрока, используя условие, что это должен быть первый прогресс, выпущенный после data_ms (epoch unixtimstamp) этого события.

В моей таблице 4 миллиарда строк данных, она разбита на данные.

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

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 07 июля 2018

Похоже, вы хотите заполнить пробелы в прогрессе столбца. Я не совсем понял условие, но если оно основано на data_ms, тогда ваш запрос улья должен выглядеть следующим образом:

dataFrame.createOrReplaceTempView("your_table")

val progressDf = sparkSession.sql(
  """
    SELECT name, player_id, data_ms, coins,  
        COALESCE(progress, LAST_VALUE(progress, TRUE) over (PARTITION BY player_id ORDER BY data_ms ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS progress
    FROM your_table;
  """
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...