如何根据另一个表中的排名对一个表中的列进行排序

时间:2017-06-08 23:13:18

标签: hive mapreduce

我有一个表1,其中包含User_ID和Item_List,其中项目是随机排列的

Customer_id   Item_List
22              1,4,3,2
24              6,3,2,1
23              4,5,7,8

表2列出了根据最高值

的项目
Item_Id   Item_Rank
  1          8
  2          5
  3          3
  4          4
  5          2
  6          7
  7          1
  8          6

我想生成一个具有Customer_id的表,其中相应的项目列表根据表2中的项目排名进行排名

Customer_id     Ranked_Item_List
   22             3,4,2,1
   24             3,2,6,1
   23             7,5,4,8

我不知道在蜂巢中执行此操作的任何有效方法。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我可以用两种不同的方式思考,创建你的UDF以避免爆炸或

select customer_id, collect_list(item_id) from (

select customer_id, item_id, item_rank from
table1 lateral view inline(item_list) item_id join
table2 on table1.item_id = table2.item_id --this should be done as mapjoin if your rank table is not big 
)  distributed by customer_id, sort by item_rank;

就像我之前说过的,根据您的数据大小,您可以创建一个UDF,以根据您的查找表在映射器级别应用排序