带hiveql的欧几里德距离

x8goxv8g  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(326)

我在Hive上有一张table,结构如下:
传感器;温度;压力
1;23;23
2;34;45
三;45;55
我想知道是否有可能用hiveql udf实现knn算法。目标是获得一个表作为输出(例如,对于k=3),如下所示:
传感器;温度;压力;1传感器;第二传感器;3传感器
我很感激你的帮助

ijnw1ujt

ijnw1ujt1#

我假设你正在寻找一些免费的开源软件。
有hivemall,但目前不支持欧几里得距离:https://github.com/myui/hivemall
但是,它支持几个距离度量。

ee7vknir

ee7vknir2#

euclid_distance / euclid_similarity 从hivemall v0.3.2-3开始支持此功能。
您可以使用各种相似性函数(余弦相似性、jaccard相似性、Angular 相似性和欧几里德相似性)执行k-nn,如下所示:
https://github.com/myui/hivemall/wiki/news20-nearest-neighbor-(knn)-搜索#knn使用minhashing搜索
输入格式为字符串数组 features .

|: rowid :|:                features               :|
-----------------------------------------------------
|    1    | [Sensor:1, Temperature:23, Pressure:23] |
|    2    | [Sensor:2, Temperature:34, Pressure:55] |

您需要如下自联接:

select
   l.rowid,
   euclid_distance(l.features, r.features) as distance
from
   mytable l 
   LEFT OUTER JOIN mytable r

注意:为了高效的top-k相似性列表,您可以使用 each_top_k 功能如下:
https://github.com/myui/hivemall/wiki/efficient-top-k-computation-on-apache-hive-using-hivemall-udtf#top-k-相似计算

相关问题