У меня есть две таблицы. одна включает в себя 1 миллион записей, другая - 20 миллионов записей.
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 = a b / (| 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)
.....
Я пытался использовать перекрестное соединение в улье. но я всегда получаю ошибку из-за того, что таблица слишком велика.