hive - 如何避免跨 hive 并计算 hive 中的 cos 相似性?
问题描述
我有两张桌子。一个包含 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 = 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)
.....
我尝试在配置单元中使用交叉连接。但由于表太大,我总是失败。
解决方案
推荐阅读
- architecture - 为什么苹果需要 Rosetta 让基于 x86 的应用程序在 arm 芯片上工作?
- visual-studio-code - 将 IntelliSense 更改为在您键入时自动完成
- reactjs - 在渲染类组件之前反应获取数据
- python - Discord.py:不确定我的 Kick Member 命令的问题出在哪里
- regex - UTF8文件上的Haskell RegEx匹配
- android - 为什么我添加更新数据后我的 recyclerview 回到顶部?
- javascript - 通过选中 javascript 中的单选框来隐藏/显示信息
- android - 无休止运行的前台服务将 Google Play 广告服务保留在内存中
- html - Flexbox:第一个孩子 100% 高度的父母和其他兄弟孩子均匀地堆叠到它的一边
- python - 如何在python中正确导入字典以及如何修改导入的字典