Spark создает новый строковый столбец на основе максимального значения row_number и строкового значения другого столбца - PullRequest
0 голосов
/ 31 марта 2020

Предположим, у нас есть

id, hit, item, row_number
1234, 1, item1, 1
1234, 2, item2, 2
2345, 2, item1, 1
2345, 2, item2, 2
2345, 4, item3, 3

, где row_number было создано из windows функции, разделенной на id на hit в порядке возрастания.

Теперь я хотел бы создать новый столбец max_hit_item, который содержит имя элемента с наибольшим значением row_number на пользователя.

Так что в нашем примере он вернет

id, hit, item, row_number, max_hit_item
1234, 1, item1, 1, item2
1234, 2, item2, 2, item2
2345, 2, item1, 1, item3
2345, 2, item2, 2, item3
2345, 4, item3, 3, item3

I ' Я думаю, поскольку я не хочу удалять строки, мне придется использовать функцию windows. Существует ли уникальный способ использования функции windows для достижения этой цели? В идеале я не хотел бы использовать join, но любые решения приветствуются.

1 Ответ

1 голос
/ 31 марта 2020

Использование оконной функции first.

import org.apache.spark.sql.expressions.Window
val w = Window.partitionBy("id").orderBy(desc("hit"))
val result = df.withColumn("max_hit_item", first("item").over(w))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...