♚
作者:KingShine,现居北京,程序猿一枚。主要方向为数据分析、自然语言处理,大数据。希望结交到志同道合的朋友,共同进步。
一、数据准备
本文主要是作为一个PySpark的入手实例来做,数据来源网络。主要用到两个数据文件:
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必须先建立临时视图,后面才能使用,否则会报错。