Как я могу последовательно получить один и тот же кадр данных в спарк - PullRequest
0 голосов
/ 23 января 2019

Мои данные такие, статус 0 или 1, uid - идентификатор пользователя.

   uid   |timestamp |status
   1     |1         | 0
   2     |3         | 1
   1     |2         | 1
   2     |1         | 0
   1     |3         | 1
   2     |2         | 0
   2     |4         | 0

Я хочу разделить данные по uid и упорядочить по отметке времени asc.

   uid   |timestamp |status
   1     |1         | 0
   1     |2         | 1
   1     |3         | 1
   2     |1         | 0
   2     |2         | 0
   2     |3         | 1
   2     |4         | 0

И получите все последовательно один и тот же статус и соедините их, чтобы делать другие вещи. Извините, мой английский ... дерьмо. Результат такой, как показано ниже:

   uid   |status  |timestamps-asc-order
   1     |(0)     | (1)
   1     |(1,1)   | (2,2)
   2     |(0,0)   | (1,2)
   2     |(1)     | (3)
   2     |(0)     | (4)

Я могу сделать раздел и заказать с оконной функцией. Но тогда как получить последовательно такой же статус?

val window = Window.partitionBy("uid").orderBy($"timestamp".asc)

1 Ответ

0 голосов
/ 23 января 2019

Добро пожаловать в StackOverflow.

Вам нужна функция collect_list .

Вы должны быть в состоянии достичь того, что вы спрашиваете с

df.withColumn("timestamps-asc-order", collect_list("timestamp").over(Window.partitionBy("uid").orderBy("timestamp"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...