与HiveQL的欧几里德距离

时间:2015-04-03 16:03:19

标签: hadoop hiveql

我在Hive上有一个表格,其结构如下:

传感器;温度;压力
1; 23; 23
2; 34; 45
3; 45; 55

我想知道是否可以使用HiveQL UDF实现KNN算法。 目标是获取输出(例如k = 3),如:

传感器;温度;压力; 1stSensor; 2ndSensor; 3ndSensor

我感谢您的帮助

Soufs

2 个答案:

答案 0 :(得分:0)

我假设您正在寻找免费的东西&开源。

还有HIVEmall,但目前它并不支持Euclidian距离:https://github.com/myui/hivemall

但是,它支持几种距离指标。

答案 1 :(得分:0)

自Hivemall v0.3.2-3起支持

euclid_distance / euclid_similarity功能。

您可以使用各种相似度函数(cosine_similarity,jaccard_similarity,angular_similarity和euclid_similarity)执行k-NN,如下所示:

https://github.com/myui/hivemall/wiki/news20-Nearest-Neighbor-(kNN)-Search#knn-search-using-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-similarity-computation