實戰 Hive在內容推薦系統中的應用(二)

2021-09-09 07:54:17 字數 3214 閱讀 3107

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,就在他們中間連一條邊。如果我...