#hive #apache-spark-sql #hiveql #top-n
#улей #apache-spark-sql #hiveql #top-n
Вопрос:
У меня есть следующая transaction
таблица:
customer_id, category, product_id, score
Я группирую по customer_id
и category
для создания списка product_id-score
пар карт:
SELECT
s.customer_id,
s.category,
collect_list(s.pair)
FROM
(
SELECT
customer_id,
category,
map(product_id, score) AS pair
FROM
transaction
WHERE
score > {score_threshold}
) s
GROUP BY
s.customer_id,
s.category
Теперь я хочу сделать еще один шаг вперед. Для каждой группы я хочу сохранить только верхние n
пары, отсортированные по score
(в порядке убывания).Я попробовал OVER (PARTITION BY...ORDER BY)
by, у меня возникли проблемы.
Примечание: transaction
таблица разделена на category
Спасибо
Ответ №1:
Попробуй это:
SELECT
s.customer_id,
s.category,
collect_list(s.pair)
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY customer_id, category ORDER BY score desc) as RowId
customer_id,
category,
map(product_id, score) AS pair
FROM
transaction
WHERE
score > {score_threshold}
) s
where s.RowId < n
GROUP BY
s.customer_id,
s.category