我有两张table。一个包含100万条记录,另一个包含2000万条记录。
table 1
value
(1, 1)
(2, 2)
(3, 3)
(4, 4)
(5, 4)
....
table 2
value
(55, 11)
(33, 22)
(44, 66)
(22, 11)
(11, 33)
....
我需要使用表1中的值乘以表2中的值,得到结果的排名,然后得到排名前5的结果。结果如下:
value from table 1, top 5 for each value in table 1
(1, 1), 1*44 + 1*66 = 110
(1, 1), 1*55 + 1*11 = 66
(1, 1), 1*33 + 1*22 = 55
(1, 1), 1*11 + 1*33 = 44
(1, 1), 1*22 + 1* 11 = 33
.....
我试着在Hive中使用交叉连接。但是我总是因为table太大而失败。
1条答案
按热度按时间vm0i2vca1#
首先从表2中选择Top5,然后与第一个表进行交叉连接。这将与交叉联接两个表和交叉联接后取top5相同,但在第一种情况下联接的行数将少得多。小5行数据集的交叉连接将转换为Map连接,并以表1完全扫描的速度执行。
请看下面的演示。交叉连接转换为Map连接。注意
"Map Join Operator"
在计划和本警告中:"Warning: Map Join MAPJOIN[19][bigTable=?] in task 'Map 1' is a cross product"
:用你的table替换我演示中的堆栈。