2015-04-03 35 views
0

歐幾里得距離我有蜂巢一個表與下面的結構:與HiveQL

傳感器;溫度;壓力
1; 23; 23
2; 34; 45
3; 45; 55

我想知道是否可以使用HiveQL UDF實現KNN算法。 的OBJECTIF是獲得作爲輸出(對於k = 3爲例)的表等:

傳感器;溫度;壓力; 1stSensor; 2ndSensor; 3ndSensor

我明白你幫助

Soufs

回答

0

euclid_distance/euclid_similarity自Hivemall v0.3.2-3以來,支持該功能。

您可以使用各種相似函數(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