我有一个hive表A,其中包含以下列
USER ITEM SCORE
U1 I1 S1
U1 I2 S2
...................
Run Code Online (Sandbox Code Playgroud)
我想要的是表格B这样的格式
USER ITEMS #ITEMS is an array
U1 [I2,I3,...] # items are sorted according to score in descending and limit 5
Run Code Online (Sandbox Code Playgroud)
对于用户少于5个项目,只需将项目按降序排列.
应该是这样的:
select USER,collect_set(ITEM) from (
select USER, ITEM,row_number () over (partition by USER order by SCORE desc) RN
from A
) t1
where RN <= 5
group by USER;
Run Code Online (Sandbox Code Playgroud)