如何避免跨Hive,计算Hive中的cos相似度?

jm81lzqq  于 2021-06-27  发布在  Hive
关注(0)|答案(0)|浏览(450)

我有两张table。一个包含100万条记录,另一个包含2000万条记录。

table 1 scheme is:
CREATE TABLE IF NOT EXISTS keyword_vector
(keyword string, vec array<double>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TextFile;

table 1
keyword,     vec
apple       (1, 1)
orange      (2, 2)
banana      (3, 3)
cat         (4, 4)
dog         (5, 4)
....
table 2 schema:
CREATE TABLE IF NOT EXISTS dict_keyword_vector
(keyword string, vec array<double>)
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
 STORED AS TextFile;

table 2
keyword         vec
fruit          (55, 11)
animal         (33, 22)
pear           (44, 66)
kiwi           (22, 11)
peach          (11, 33)
....

我需要使用公式cos|simlairy=ab/(| a | | b |),这个公式来自https://en.wikipedia.org/wiki/cosine_similarity
然后得到结果的排名,按相似度排序得到前5名。结果如下:

value from table 1, top 5 for each value in table 1
(1, 1), (1*44 + 1*66)/sqrt(1 + 1)*sqrt(44*44 + 66*66)
(1, 1), (1*55 + 1*11)/sqrt(1 + 1)*sqrt(55*55 + 11*11)
(1, 1), (1*33 + 1*22)/sqrt(1 + 1)*sqrt(33*33 + 22*22) 
(1, 1), (1*11 + 1*33)/sqrt(1 + 1)*sqrt(11*11 + 33*33)
(1, 1), (1*22 + 1* 11)/sqrt(1 + 1)*sqrt(22*22 + 11*11)
.....

我试着在Hive中使用交叉连接。但是我总是因为table太大而失败。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题