协同过滤itembase计算Spark实现(二)

博主前期有写过协同过滤协同过滤itembase增量计算Spark实现(一),其中已经较为基础的演示了基于欧拉距离求解相似度的过程,由于都是在一个JOB里,随着数据量的增长会出现计算耗时过长、OOM等现象,后期博主在推荐系统架构优化方面发现上述五个步骤在诸如看了还看,买了还买,相关搜索词,搜索最终购买等推荐模块存在着大量的相似,这些步骤的复用性太强,所以就开始考虑对算法模块按其计算步骤进行拆分,拆分之后的代码结构如下图:

这里写图片描述

其中rec文件夹下为公用算法模块,主要包括norms,mastrix,similarity。后续求相似度得分的各种算法实现都可以在此模块下添加。
catalog文件夹为类目推荐模块,只里面只需要将原始数据dataclean成算法所需输入及算法结构组装成所需输出格式即可。

itembase协同过滤算法主要可以拆分成如下几个步骤:

1.数据清洗         dataclean
2.计算模           norms
3.生成共生矩阵      matrix
4.计算相似度        similarity
5.转化输出          output

这里写图片描述

下面演示架构调整之后itembase的计算过程:

数据清洗

如果可以从日志采集系统或者系统日志中得到如下基础数据,那恭喜已经迈出了成功的一大步,因为已经拥有了生产资料。

USERIF      SKU      REF
1000000148,374753033,2
1000000444,213854638,2
1000000444,250439018,2
1000000444,255468579,1
1000000518,160079966,2
1000000518,231416046,2
1000000518,236056060,2
1000000518,241393352,1
1000000518,242298041,1
1000000518,248723096,1
1000000533,216326552,2
1000000611,265955264,2
1000000665,212797458,2
1000000826,240917738,2
1000001161,229249059,2
......

catalogDataClean

aggregateByKey(new ArrayList<Tuple2<Long, Float>>(), new
                Function2<List<Tuple2<Long, Float>>, Tuple2<Long, Float>,
                        List<Tuple2<Long, Float>>>() {
                    @Override
                    public List<Tuple2<Long, Float>> call(List<Tuple2<Long, Float>> v1, Tuple2<Long, Float> v2) throws Exception {
                        if (0 != v2._1() && 0 != v2._2()) {
                            v1.add(v2);
                        }
                        return v1;
                    }
                }, new Function2<List<Tuple2<Long, Float>>, List<Tuple2<Long, Float>>, List<Tuple2<Long, Float>>>() {
            @Override
  
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值