一、数据准备
主要用到两个数据文件: action.txt , document.txt 。 下表为 action.txt ,数据格式:
userid docid behaivor time ip ,即:
用户编码 文档编码 行为 日期IP地址

下表为 document.txt ,数据格式:
docid channelname source keyword:score ,即:
文档编码 类别(大类) 主题(细类) 关键词: 权重

二、用户点击率
用户点击率即为 action.txt 文件中每个用户behaivor列中1的数量除以0的数量。
1、创建 SparkSession 对象

2、读取数据,将数据根据‘~’拆分,获取 userid 和 behavior 两列
click_rate1 数据如下:
3、统计用户的各类行为数
click_rate2 数据如下:
4、将 userid , behavior 和数量取出作为3列,并转为DataFrame格式

click_rate3_df 数据如下:

5、根据 userId 进行分组,将 behavior 列数据进行旋转作为列标数值为 cnt 。 并将 behavior 的0和1替换为 “browse” 和 ”click” 。
click_rate5 数据如下:

6、填充缺失值

click_rate6 数据如下:

7、将计算的数据作为新列添加到数据
click_rate 数据如下:

8、将最后处理的数据保存到本地,关闭SparkSession
最后保存到本地的数据为多个文件,每个文件的格式如下:


三、用户标签
使用主题(细类)给用户打标签
1、读取 docunment.txt ,获取 docid 、 source 两列,即文档编码和主题(细类)两列
sources_df 数据如下:

2、读取 action.txt ,只获取具有点击行为的 userid 和 docid 数据,即 behavior 为1的数据。
actions_df 数据如下:

3、创建两个DataFrame的临时视图
4、进行关联查询

interestTags 数据如下:

5、将最后处理的数据保存到本地,关闭SparkSession
导出后的数据如下:

踩雷点:
1、代码开发时,可以每个操作跟一个action,方便查看数据,跑批的时候不需要每个都跟,只需要最后一个action,否则会给机器增加很多工作量。
2、中间过程生成的DataFrame必须先建立临时视图,后面才能使用,否则会报错。
本文介绍了一种基于用户行为数据计算点击率和生成用户标签的方法。通过处理action.txt和document.txt两个数据集,首先计算了用户点击率,然后利用主题(细类)为用户打上标签,详细步骤包括数据读取、统计、DataFrame操作及数据保存。
1856

被折叠的 条评论
为什么被折叠?



