在Spark MlLib中的ASL 交替最小二乘法推荐模型,接收的参数为
userID:Int
itemID:Int
评分:Int
那么产生了两个问题:
1. 生产数据的用户id和itemID可能是字符串
2. 最大值问题
首先说第一个问题,如果是字符串,需要重新定义整形的ID,重新定义ID的方式有两种
RDD:data.map(_.uid).distinct().zipWithIndex().map(l=>(l._1,l._2.toInt)).toDF("uid","user")
DataFarem:df.select("item").distinct().withColumn("itemid",monotonicallyIncreasingId)
目前只能用第一种方式,第二种方式会生成Bigint而超出模型的接受范围。
然后第二个问题:
如果限制了类型,传入的最大值为int的最大值 2147483647(在32位操作系统中,由于是二进制,其能最大存储的数据是1111111111111111111111111111111即31个1。正因为此,体现在可视系统中的十进制应该为2147483647)
PS:21亿的item或者user的数量,应当能支撑一般业务了。