Spark ALS 协同过滤(CF)如何将Str类型的userID或itemID转换为Rating中要求的int类型

/**
* 问题:
*      在对数据进行训练时,Rating要求的是int,int,double,但是现有的数据是long,string,double类
       型,使用toInt进行转换时依然会报错,这是因为long类型转换成int类型已经超出了int的最大值。
*
* 解决思路:
*      创建两张映射表,将long类型的字段映射成int类型(使用row_number()添加自增序列),然后拿映射的
*      字段进行训练,训练完成后,再将映射的字段转换成原有字段,而后进行推荐。
*
*/


Spark ALS 协同过滤(CF)如何将Str类型的userID或itemID转换为Rating中要求的int类型_第1张图片

//创建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

你可能感兴趣的:(机器学习/数据挖掘,Spark)