Spark ALS 協同過濾(CF)如何將Str類型的userID或itemID轉換爲Rating中要求的int類型

/**
* 問題:
*      在對數據進行訓練時,Rating要求的是int,int,double,但是現有的數據是long,string,double類
       型,使用toInt進行轉換時依然會報錯,這是因爲long類型轉換成int類型已經超出了int的最大值。
*
* 解決思路:
*      創建兩張映射表,將long類型的字段映射成int類型(使用row_number()添加自增序列),然後拿映射的
*      字段進行訓練,訓練完成後,再將映射的字段轉換成原有字段,而後進行推薦。
*
*/


//創建userid_mapping映射表
 

insert overwrite table userId_mapping
select
user_id,
ROW_NUMBER() OVER(order by user_id) user_id_mapping
from
(select distinct user_id from user_browse_cation) t


//創建newsNumber_mapping映射表

insert overwrite table newsNumber_mapping
select
news_number,
ROW_NUMBER() OVER(order by user_id) news_number_mapping
from
(select distinct news_number from user_browse_cation) t

總結:整體的思路就是做一個映射表,將輸入到ALS的數據提前轉換爲int類型的數據,之後進行預測,預測後的數據在轉換回原來的數據內容即可。

參考:

https://blog.csdn.net/lukabruce/article/details/84816981
https://blog.csdn.net/csmnjk/article/details/78893900
https://blog.csdn.net/zhanghytc/article/details/7456930

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章