Spark ALS推荐系统用户ID非整数的解决思路

来源:互联网 发布:网络关注平台出租 编辑:程序博客网 时间:2024/04/30 17:56

1.背景描述:

日志中用户ID一般都是非整数的字符串,在使用Spark ALS做推荐时,ALS的train函数的第一个参数是Rating。而Rating的第一个参数userID是Int型,故要使用Rating来做训练数据集,就要将用户ID字符串映射成Int型。

2.解决思路:

Spark的RDD自带方法zipWithUniqueId可以将RDD中元素和一个唯一ID组合成键/值对

3.原理阐释:

每个分区中第一个元素的唯一ID值为:该分区索引号,每个分区中第N个元素的唯一ID值为:(前一个元素的唯一ID值) + (该RDD总的分区数)。

4.应用实例:

scala> var rdd = sc.makeRDD(Seq("A","B","C","D","E","F"),2)rdd1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[44] at makeRDD at :21scala> rdd.zipWithUniqueId().collectres32: Array[(String, Long)] = Array((A,0), (B,2), (C,4), (D,1), (E,3), (F,5))//总分区数为2//第一个分区第一个元素ID为0,第二个分区第一个元素ID为1//第一个分区第二个元素ID为0+2=2,第一个分区第三个元素ID为2+2=4//第二个分区第二个元素ID为1+2=3,第二个分区第三个元素ID为3+2=5

将Array的第二个Long参数用toInt函数转换为Int,再用toMap函数将rdd转换为Map[String,Int]即可。由于key和value都是唯一的,故可构建一个反转的Map,value当做key,key当做value。这个Map是为了将userID还原成原字符串。



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 男女怎么做才能生孩子 男女审美差异 交性 初夜 人交 女激情 那女 激情女 男女性用具 男女性 男女朋友如何相处 男女性具用品 男女性生 男妻 将门男妻 男妻嫁到 完美男妻 男妻太嚣张 强宠男妻 独宠男妻 男主的男妻 男妻的规矩 缠爱至上男妻 王爷的怀孕男妻 男妻难弃by紫陌堂 少将的双性男妻 穿书之福运男妻 完美男妻焦尾参 首富炮灰怀孕男妻 男妾 王爷的男妾 男妾个个都好帅 男妾by冰糖小透明 男妾by墨香铜臭 王爷的男妾 浮云的爱 男妾 隐芳 男妻男妾 遥舞音稀 男妾by隐芳 埋男婴 周口男婴 被埋男婴