3.6 轉換成key,value的方式
select a.user_id,concat_ws(':',b.kw,cast(count(1) as string)) as kw_w
from user_actions as a
left outer join(
select article_id,kw
from articles
lateral view explode(kws) to as kw
) bon (a.article_id=b.article_id)
group by a.user_id,b.kw;
結果11 kw1:4
11 kw4:1
11 kw5:1
11 kw8:3
11 kw9:1
22 kw1:1
22 kw3:1
22 kw4:1
22 kw5:1
22 kw6:1
22 kw7:2
22 kw9:1
33 kw1:1
33 kw3:1
33 kw6:1
33 kw7:1
3.7再次根據使用者id,kw進行分組,把key,value生成乙個集合,用","號進行拼接
select cc.user_id,concat_ws(",",collect_set(cc.kw_w))
from(
select a.user_id,concat_ws(':',b.kw,cast(count(1) as string)) as kw_w
from user_actions as a
left outer join(
select article_id,kw
from articles
lateral view explode(kws) to as kw
) bon (a.article_id=b.article_id)
group by a.user_id,b.kw
) as cc group by cc.user_id;
結果11 kw1:4,kw4:1,kw5:1,kw8:3,kw9:1
22 kw1:1,kw3:1,kw4:1,kw5:1,kw6:1,kw7:2,kw9:1
33 kw1:1,kw3:1,kw6:1,kw7:1,kw8:1
35 1,kw3:1,kw6:1
77 kw1:1,kw4:1,kw5:1,kw7:1,kw9:1
99 1,kw3:1,kw6:1
3.8 因kw_w欄位是拼接的,是字串格式,把轉換成map型別
select cc.user_id,str_to_map(concat_ws(",",collect_set(cc.kw_w)))
from(
select a.user_id,concat_ws(':',b.kw,cast(count(1) as string)) as kw_w
from user_actions as a
left outer join(
select article_id,kw
from articles
lateral view explode(kws) to as kw
) bon (a.article_id=b.article_id)
group by a.user_id,b.kw
) as cc group by cc.user_id;
結果ok
11
22
33
35
77
99
3.9 最終把結果放到乙個表裡
create table user_kws as
select cc.user_id,str_to_map(concat_ws(",",collect_set(cc.kw_w))) as wm
from(
select a.user_id,concat_ws(':',b.kw,cast(count(1) as string)) as kw_w
from user_actions as a
left outer join(
select article_id,kw
from articles
lateral view explode(kws) to as kw
) bon (a.article_id=b.article_id)
group by a.user_id,b.kw
) as cc group by cc.user_id;
3.10 查詢包括kw1偏好的使用者
select user_id,wm[『kw1』] from user_kws;
11 4
22 1
33 1
3.11 把每行的key提取出來,和values提取出來。返回兩個陣列
select user_id,map_keys(wm),map_values(wm) from user_kws;
11 ["kw1","kw4","kw5","kw8","kw9"] ["4","1","1","3","1"]
22 ["kw1","kw3","kw4","kw5","kw6","kw7","kw9"] ["1","1","1","1","1","2","1"]
3.12 把map結果拆開,分別是key value 自己命名
select user_id,keyword,weight
from user_kws
lateral view explode(wm) t as keyword,weight;
11 kw1 4
11 kw4 1
11 kw5 1
11 kw8 3
11 kw9 1
22 kw1 1
22 kw3 1
22 kw4 1
22 kw5 1
22 kw6 1
完結。。。。。。
實戰智慧型推薦系統(4) 什麼是好的推薦系統?
推薦系統與搜尋引擎 1 資訊過載。隨著資訊科技和網際網路的發展,人們逐漸從資訊匱乏走向了資訊過載時代。比如說如果在小超市買個東西,一件一件挑就是了。但是在 網買東西,假設不使用搜尋引擎,大量的物品讓使用者根本無法選擇。2 使用者需求不明確。如果使用者需求明確,正如前面舉得例子。假如我明確知道自己想要...
推薦系統基礎演算法之基於內容的推薦演算法
基於內容的推薦方法的優點是 基於內容的推薦方法的缺點是 1.特徵 內容 提取,提取每個待推薦物品的特徵 內容屬性 例如電影 書籍 商品的分類標籤等。這些特徵往往分為兩種 結構化的特徵和非結構化的特徵。所謂結構化特徵就是特徵的取值限定在某個區間範圍內,並且可以按照定長的格式來表示。例如,電影類別特徵,...
推薦系統中的Graph Model
推薦中對graph model的研究主要有兩個方面,乙個是如何構圖,另乙個是如何在圖上做ranking。關於構圖問題,取決於資料,首先考慮如果我們只有user item的資料,那麼最簡單的方法就是構造二分圖,兩類節點,user節點和item節點,如果user喜歡item,就在他們中間連一條邊。如果我...