在 Hive 中查询用户标签及权重
hive> select * from user_profile_hbase limit 1;OKuser:1{"birthday":0.0,"gender":null}{"18:##":0.25704484358604845,"18:&#":0.25704484358604845,"18:+++":0.23934588700996243,"18:+++++":0.23934588700996243,"18:AAA":0.2747964402379244,"18:Animal":0.2747964402379244,"18:Author":0.2747964402379244,"18:BASE":0.23934588700996243,"18:BBQ":0.23934588700996243,"18:Blueprint":1.6487786414275463,"18:Code":0.23934588700996243,"18:DIR......接下来,要将用户属性信息加入到用户画像中 。读取用户基础信息,存储到用户画像表的 basic 列族即可
def update_user_info():"""更新用户画像的属性信息:return:"""spark.sql("use toutiao")user_basic = spark.sql("select user_id, gender, birthday from user_profile")def udapte_user_basic(partition):import happybase#用于读取hbase缓存结果配置pool = happybase.ConnectionPool(size=10, host='172.17.0.134', port=9090)for row in partition:from datetime import dateage = 0if row.birthday != 'null':born = datetime.strptime(row.birthday, '%Y-%m-%d')today = date.today()age = today.year - born.year - ((today.month, today.day) < (born.month, born.day))with pool.connection() as conn:table = conn.table('user_profile')table.put('user:{}'.format(row.user_id).encode(),{'basic:gender'.encode(): json.dumps(row.gender).encode()})table.put('user:{}'.format(row.user_id).encode(),{'basic:birthday'.encode(): json.dumps(age).encode()})conn.close()user_basic.foreachPartition(udapte_user_basic)到这里,我们的用户画像就计算完成了 。
Apscheduler 定时更新定义更新用户画像方法,首先处理用户行为日志,拆分文章主题词,接着计算用户标签的权重,最后再将用户属性信息加入到用户画像中
def update_user_profile():"""定时更新用户画像的逻辑:return:"""up = UpdateUserProfile()if up.update_user_action_basic():up.update_user_label()up.update_user_info()在 Apscheduler 中添加定时更新用户画像任务,设定每隔 2 个小时更新一次
from apscheduler.schedulers.blocking import BlockingSchedulerfrom apscheduler.executors.pool import ProcessPoolExecutor# 创建scheduler,多进程执行executors = {'default': ProcessPoolExecutor(3)}scheduler = BlockingScheduler(executors=executors)# 添加一个定时运行文章画像更新的任务,每隔1个小时运行一次scheduler.add_job(update_article_profile, trigger='interval', hours=1)# 添加一个定时运行用户画像更新的任务,每隔2个小时运行一次scheduler.add_job(update_user_profile, trigger='interval', hours=2)scheduler.start()另外说一下,在实际场景中,用户画像往往是非常复杂的,下面是电商场景的用户画像,可以了解一下 。

文章插图
用户画像
【新闻个性化推荐系统源码之构建离线用户画像】
推荐阅读
- 十大深圳美食推荐
- 护肤品|别只看推荐 看她们自己用什么护肤品 美妆博主自用8款护肤品
- 护肤品|抗衰老越早越好 别等老了后悔 5款全球公认的抗衰老护肤品推荐
- 黄菊散热白菊明目,为您推荐几款养肝明目茶
- 6款相见恨晚的手机APP分享,用过就舍不得卸载,强烈推荐给你们
- 老茶收藏家赵玉光,八角亭2015年品味布朗产品推荐
- 推荐一款好用的SSH工具,你值得拥有
- 方便携带的蓝牙耳机有哪些,方便小巧佩戴舒适的蓝牙耳机推荐
- 什么洗发水最好 十大洗发水品牌推荐
- 今日给大家推荐两款redis可视化工具
