【基于Mahout的个性化推荐系统】3、显微镜模块设计

本文介绍了基于Mahout的个性化推荐系统中的数据采集和执行器模块。数据采集模块包括异步的用户行为信息和推荐商品信息采集,其中用户行为用于计算偏好,商品信息用于构建排行榜。执行器则负责计算用户偏好并写入数据库。整个系统利用线程池实现异步处理,确保高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总纲传送门:基于Mahout的个性化推荐系统
GitHub传送门:基于Mahout的个性化推荐系统

一、前言

在推荐系统中,往往会有很多数据来源,比如初始数据集录入(学习使用)、第三方平台数据(类似广告联盟)、用户行为数据(在平台上的操作数据如点击)、用户属性分析数据(年龄性别等)等。

本文主要讲解推荐系统的数据来源模块——数据采集模块、执行器模块。数据采集主要用于采集及写入,执行器主要用于计算刷新用户偏好。

在本项目中,数据采集模块主要采集用户行为数据和推荐商品数据。用户行为信息主要用于计算用户偏好,推荐商品信息主要用于构建排行榜,进行热门推荐。

取名,讲究

显微镜:借鉴于曾经实习的时候,接触过前端项目名为显微镜——主要做前端埋点上报用户行为信息所用。

嗅探器:在采集信息的时候,除了前端上报信息外,均是采用异步计算方式进行采集、计算写入,类似于网络攻防中的“嗅探器”,故名之。

执行器:主要用于进行执行计算用户偏好信息,将用户行为信息进行计算并写入用户偏好表中,起到执行器的作用。

二、异步

在此模块中,用户信息采集、计算写入均是采用的异步执行。在本项目中,异步的实现主要是通过基于线程池进行。通过配置线程池,当异步方法发生调用时,通过到线程池中获取线程进行方法执行调用。

线程池配置示例:

/**
 * 基础业务逻辑
 */
@Bean
public Executor asyncServiceExecutor() {
   
    log.info("ExecutorConfiguration#asyncServiceExecutor start...");
    return getDefaultExecutor();
}

/**
 * 获取默认执行器
 */
private synchronized Executor getDefaultExecutor() {
   
    ThreadPoolTaskExecutor executor = new VisibleThreadPoolTaskExecutor();
    executor.setCorePoolSize(corePoolSize);
    executor.setMaxPoolSize(maxPoolSize);
    executor.setQueueCapacity(queueCapacity);
    executor.setThreadNamePrefix(threadNamePrefix);
    executor.setKeepAliveSeconds(keepAliveSeconds);
    executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
    //执行初始化
    executor.initialize();
    return executor;
}

其中,方法名asyncServiceExecutor即为线程池名称。同时,在配置过程中,需要注意线程池策略问题,以下为各个策略说明:

  • ThreadPoolExecutor.AbortPolicy: 丢弃任务并抛出RejectedExecutionException异常。
  • ThreadPoolExecutor.DiscardPolicy: 也是丢弃任务,但是不抛出异常。
  • ThreadPoolExecutor.DiscardOldestPolicy: 丢弃队列最前面的任务&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值