核心参考资料:http://dblab.xmu.edu.cn/blog/1534/
数据集:https://pan.baidu.com/s/1cs02Nc
所需知识储备
简单使用python,了解Kafka的使用
训练技能
Python基本使用,Python操作Kafka代码库kafka-python使用
任务清单
1、利用Python预处理数据
2、Python操作Kafka
数据预处理
本案例采用的数据集压缩包为data_format.zip,该数据集压缩包是淘宝2015年双11前6个月(包含双11)的交易数据(交易数据有偏移,但是不影响实验的结果),里面包含3个文件,分别是用户行为日志文件user_log.csv 、回头客训练集train.csv 、回头客测试集test.csv. 在这个案例中只是用user_log.csv这个文件,下面列出文件user_log.csv的数据格式定义:
用户行为日志user_log.csv,日志中的字段定义如下:
1. user_id | 买家id
2. item_id | 商品id
3. cat_id | 商品类别id
4. merchant_id | 卖家id
5. brand_id | 品牌id
6. month | 交易时间:月
7. day | 交易事件:日
8. action | 行为,取值范围{0,1,2,3},0表示点击,1表示加入购物车,2表示购买,3表示关注商品
9. age_range | 买家年龄分段:1表示年龄<18,2表示年龄在[18,24],3表示年龄在[25,29],4表示年龄在[30,34],5表示年龄在[35,39],6表示年龄在[40,49],7和8表示年龄>=50,0和NULL则表示未知
10. gender | 性别:0表示女性,1表示男性,2和NULL表示未知
11. province| 收获地址省份
数据具体格式如下:
这个案例实时统计每秒中男女生购物人数,因此针对每条购物日志,我们只需要获取gender即可,然后发送给Kafka,接下来Spark Streaming再接收gender进行处理
数据预处理
pip install karka-python
文件名为:producer.py
#coding:utf-8
import csv
import time
from kafka import KafkaProducer
#实例化一个KafkaProducer示例,用于向kafka投递消息
producer=KafkaProducer(bootstrap_servers='10.200.117.85:6667')
#这里的10.200.117.85是集群某台机器的ip,如果是单机可以用localhost
#6667是kafka broker的端口,应该是kafka版本不同而有变化,应对自身应查询broker的端口号是多少
#打开数据文件
csvfile=open("D:/public_train_data/data_format/user_log.csv","r",encoding='utf-8')
#生成一个可用于读取csv文件的reader
reader=csv.reader(csvfile)
i=100
for line in reader:
gender=line[9] #性别在每行日志代码的第9个元素
if gender=='gender':
continue #去除第一行表头
time.sleep(0.5)
#发送数据,topic为'sex;
producer.send('sex',line[9].encode('utf8'))
i=i-1
print(i)
if i==0:
print('send finished')
break
上述代码很简单,首先是先实例化一个Kafka生产者。然后读取用户日志文件,每次读取一行,接着每隔0.1秒发送给Kafka,这样1秒发送10条购物日志。这里发送给Kafka的topic为’sex’
Python操作Kafka
我们可以写一个KafkaConsumer测试数据是否投递成功,代码如下,文件名为consumer.py
#coding:utf-8
from kafka import KafkaConsumer
consumer=KafkaConsumer('sex',bootstrap_servers='10.200.117.85:6667')
for msg in consumer:
print((msg.value).decode('utf8'))