基於物品的協同過濾(二)

来源:http://www.cnblogs.com/one--way/archive/2016/07/08/5654232.html
-Advertisement-
Play Games

MapReduce實現基於物品的協同過濾: 實現過程中需要執行多個mapreduce任務。 初始數據: job1: 生成用戶對物品喜愛度矩陣 數據:初始數據 map: key=userid value=item:grade reduce: key=userid value=item:grade,it ...


MapReduce實現基於物品的協同過濾:

 

實現過程中需要執行多個mapreduce任務。

初始數據:

u1,i101,5.0
u1,i102,3.0
u1,i103,2.5
u2,i101,2.0
u2,i102,2.5
u2,i103,5.0
u2,i104,2.0
u3,i101,2.0
u3,i104,4.0
u3,i105,4.5
u3,i107,5.0
u4,i101,5.0
u4,i103,3.0
u4,i104,4.5
u4,i106,4.0
u5,i101,4.0
u5,i102,3.0
u5,i103,2.0
u5,i104,4.0
u5,i105,3.5
u5,i106,4.0

 

job1: 生成用戶對物品喜愛度矩陣

數據:初始數據

map:

key=userid

value=item:grade

reduce:

key=userid

value=item:grade,item:grade

結果:

u1 i101:5.0,i102:3.0,i103:2.5
u2 i101:2.0,i102:2.5,i103:5.0,i104:2.0
u3 i107:5.0,i105:4.5,i104:4.0,i101:2.0
u4 i106:4.0,i103:3.0,i101:5.0,i104:4.5
u5 i104:4.0,i105:3.5,i106:4.0,i101:4.0,i102:3.0,i103:2.0

 

job2: 生成物品與物品的同現矩陣

數據:job1的結果數據

map:

例,將i101 ,i102 ,i103 迴圈組合

key=item:item

value=1

reduce:

key=item:item

value=n

結果:

i101:i104 4
i101:i105 2
i101:i106 2
i101:i107 1
i102:i101 3
i102:i102 3
i102:i103 3
i102:i104 2
i102:i105 1
i102:i106 1
i103:i101 4
i103:i102 3
i103:i103 4
i103:i104 3
i103:i105 1
i103:i106 2
i104:i101 4
i104:i102 2
i104:i103 3
i104:i104 4
i104:i105 2
i104:i106 2
i104:i107 1
i105:i101 2
i105:i102 1
i105:i103 1
i105:i104 2
i105:i105 2
i105:i106 1
i105:i107 1
i106:i101 2
i106:i102 1
i106:i103 2
i106:i104 2
i106:i105 1
i106:i106 2
i107:i101 1
i107:i104 1
i107:i105 1
i107:i107 1

 

job3:將同現矩陣和用戶喜愛度矩陣進行相乘

數據:job1和job2的輸出數據

map:

區分不同的數據進行處理,根據文件目錄進行區分

FileSplit split = (FileSplit)context.getInputSplit();
dirName = split.getPath().getParent().getName();

job1的數據經過map處理:

i101 B:u1,5.0
i102 B:u1,3.0
i103 B:u1,2.5

job2的數據經過map處理:

i101 A:i101,5

key=item

value=B:u1,5.0或A:i101,5

reduce:

針對同一個item的數據,A的數據,分別和B的數據進行相乘

key=user

value=item,score

u2      i105,4.0

結果:

u2 i105,4.0
u1 i105,10.0
u4 i105,10.0
u3 i105,4.0
u5 i105,8.0
u2 i104,8.0
u1 i104,20.0
u4 i104,20.0
u3 i104,8.0
u5 i104,16.0
u2 i107,2.0
u1 i107,5.0
u4 i107,5.0
u3 i107,2.0
u5 i107,4.0
u2 i106,4.0
u1 i106,10.0
u4 i106,10.0
u3 i106,4.0
u5 i106,8.0
u2 i101,10.0
u1 i101,25.0
u4 i101,25.0
u3 i101,10.0
u5 i101,20.0
u2 i103,8.0
u1 i103,20.0
u4 i103,20.0
u3 i103,8.0
u5 i103,16.0
u2 i102,6.0
u1 i102,15.0
u4 i102,15.0
u3 i102,6.0
u5 i102,12.0
u2 i105,2.5
u1 i105,3.0
u5 i105,3.0
u2 i104,5.0
u1 i104,6.0
u5 i104,6.0
u2 i106,2.5
u1 i106,3.0
u5 i106,3.0
u2 i101,7.5
u1 i101,9.0
u5 i101,9.0
u2 i103,7.5
u1 i103,9.0
u5 i103,9.0
u2 i102,7.5
u1 i102,9.0
u5 i102,9.0
u2 i105,5.0
u1 i105,2.5
u4 i105,3.0
u5 i105,2.0
u2 i104,15.0
u1 i104,7.5
u4 i104,9.0
u5 i104,6.0
u2 i106,10.0
u1 i106,5.0
u4 i106,6.0
u5 i106,4.0
u2 i101,20.0
u1 i101,10.0
u4 i101,12.0
u5 i101,8.0
u2 i103,20.0
u1 i103,10.0
u4 i103,12.0
u5 i103,8.0
u2 i102,15.0
u1 i102,7.5
u4 i102,9.0
u5 i102,6.0
u2 i105,4.0
u4 i105,9.0
u3 i105,8.0
u5 i105,8.0
u2 i104,8.0
u4 i104,18.0
u3 i104,16.0
u5 i104,16.0
u2 i107,2.0
u4 i107,4.5
u3 i107,4.0
u5 i107,4.0
u2 i106,4.0
u4 i106,9.0
u3 i106,8.0
u5 i106,8.0
u2 i101,8.0
u4 i101,18.0
u3 i101,16.0
u5 i101,16.0
u2 i103,6.0
u4 i103,13.5
u3 i103,12.0
u5 i103,12.0
u2 i102,4.0
u4 i102,9.0
u3 i102,8.0
u5 i102,8.0
u3 i105,9.0
u5 i105,7.0
u3 i104,9.0
u5 i104,7.0
u3 i107,4.5
u5 i107,3.5
u3 i106,4.5
u5 i106,3.5
u3 i101,9.0
u5 i101,7.0
u3 i103,4.5
u5 i103,3.5
u3 i102,4.5
u5 i102,3.5
u4 i105,4.0
u5 i105,4.0
u4 i104,8.0
u5 i104,8.0
u4 i106,8.0
u5 i106,8.0
u4 i101,8.0
u5 i101,8.0
u4 i103,8.0
u5 i103,8.0
u4 i102,4.0
u5 i102,4.0
u3 i105,5.0
u3 i104,5.0
u3 i107,5.0
u3 i101,5.0

 

Job4: 矩陣乘法求和

map:

不做特殊處理

key:user

value:item,score

reduce:

將相同的user及item的score的值進行相加。

key:user  

value:item,score

結果:

u1 i105:15.5
u1 i104:33.5
u1 i107:5.0
u1 i106:18.0
u1 i101:44.0
u1 i103:39.0
u1 i102:31.5
u2 i105:15.5
u2 i104:36.0
u2 i107:4.0
u2 i106:20.5
u2 i101:45.5
u2 i103:41.5
u2 i102:32.5
u3 i105:26.0
u3 i104:38.0
u3 i107:15.5
u3 i106:16.5
u3 i101:40.0
u3 i103:24.5
u3 i102:18.5
u4 i105:26.0
u4 i104:55.0
u4 i107:9.5
u4 i106:33.0
u4 i101:63.0
u4 i103:53.5
u4 i102:37.0
u5 i105:32.0
u5 i104:59.0
u5 i107:11.5
u5 i106:34.5
u5 i101:68.0
u5 i103:56.5
u5 i102:42.5

此結果為用戶對各個物品的喜愛度。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 郵件告警發現海外工廠一Linux伺服器連接不上,DPA(Database Performance Analyzer)系統也發現其出現問題,ping這台伺服器發現網路不通,聯繫不到當地系統管理員,郵件咨詢後,這個系統管理員也發現有問題,直接重啟了,事後檢查發現日誌message裡面,從10:10分開始... ...
  • redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。所以[lr]push和[lr]pop命令的演算法時間複雜度都是O(1)。另外list會記錄鏈表的長度。所以llen操作也是O(1).鏈表的最大長度是(2的32次方-1)。我們可以通過push,pop操作從鏈表的頭部或者尾部添 ...
  • 前幾天和群里網友討論一個關於行內鏈接(intra-block chaining)的問題,問題非常有意思,恰好今天有空,順便整理了一下這些知識點。 問題描述:下麵SQL,創建一個超過255列的表(實際為256列),然後插入幾條數據,然後對錶做ANALYZE分析過後,但是發現user_tables的CH... ...
  • 定義 公用表表達式(CTE),是一個在查詢中定義的臨時命名結果集將在from子句中使用它。每個CTE僅被定義一次(但在其作用域內可以被引用任意次),並且在該查詢生存期間將一直生存。可以使用CTE來執行遞歸操作。創建的語法是: with <name of you cte>(<column names> ...
  • 眾所周知,java中為String類提供了split()字元串分割的方法,所以很容易將字元串以指定的符號分割為一個字元串數組。但是在pl/sql中並沒有提供像java中的split()方法,所以要想在pl/sql中實現字元串的分割還需要自己動手。由於在項目中需要用到此類方法,所以自己研究了一下,方便 ...
  • 數據處理過程分為數據挖掘和數據分析,廣義上說數據分析泛指整個過程,然而數據分析大的流程大致相同,如圖: 數據挖掘一般都要經過過濾、漂洗、匹配三個過程: 1.過濾:主要將數據中的不適合分析的數據過濾掉,就好比產品流水線的殘次品一樣,對數據進行組粒度的過濾,其規則可按數據大小,字元長短; 2.漂洗:也稱 ...
  • 微軟資料庫SQL Server 2016正式版在2016年6月就發佈,由於近期工作忙,一直拖到現在才有時間把安裝過程寫到博客上,分享給大家。本人一直習慣使用英文版,所以版本和截圖都是英文版的。廢話少說,轉入正題。 下載地址: https://www.microsoft.com/en-us/serve ...
  • 首先,我用的mysql資料庫是5.7.12版本。 出現的問題: 1.插入數據顯示錯誤,插入不成功,出現:Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA9' for column 'Sname' at row 1 2.插入中文,雖然插入成功,但是顯示: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...