1、用户画像文档用户画像目录 TOC o 1-3 h z u 一、概念 3 二、标签库设计: 3 三、用户性别、年龄识别过程: 3 四、用户画像本体表数据入库hbase 5 五、用户画像程序执行 6概念用户画像: 用户画像也叫用户信息标签化、客户信息。根据用户的信息和行为动作,用一些标签把用户描绘出来,描绘的标签就是用户画像。appID:用于标记APP,APP的唯一编号,判断终端安装的APP。年龄段说明:名称说明年龄段124岁以下年龄段225-30岁年龄段331-35岁年龄段436-40岁年龄段540岁以上标签库设计:标签库的设计,主要是针对应用市场上主流的App,对App进行分类,App分类信息
2、包括:App名称,男女权重信息,各个年龄段的权重信息。AppIDApp名称男性权重女性权重年龄段1年龄段2年龄段3年龄段4年龄段5见appTab表:10001|QQ|0.001|0.001|0|0.2|0.3|0.2|0.310002|飞信|0.001|0.001|0|0.2|0.3|0.2|0.310003|MSN|0.001|0.001|0|0.2|0.3|0.2|0.310004|阿里旺旺|0.001|0.001|0|0.2|0.3|0.2|0.310005|微信|0.001|0.001|0|0.2|0.3|0.2|0.310006|陌陌|0.001|0.001|0|0.2|0.3|0.
3、2|0.310007|米聊|0.001|0.001|0|0.2|0.3|0.2|0.310008|啪啪|0.001|0.001|0|0.2|0.3|0.2|0.310009|飞聊|0.001|0.001|0|0.2|0.3|0.2|0.310010|来往|0.001|0.001|0|0.2|0.3|0.2|0.310011|连我|0.001|0.001|0|0.2|0.3|0.2|0.310012|有你|0.001|0.001|0|0.2|0.3|0.2|0.3用户性别、年龄识别过程:必备条件:性别比例、年龄比例必须在识别出AppID后进行,如果AppID编号为空,那么不做处理。性别和年龄的判
4、断,都依赖于标签库的设计,也就是用户 安装的App,根据 App计算用户的性别和年龄权重信息,最后判断用户的年龄和性别。源代码:对男女性别的计算:public void protraitSex(double male2, double female2, long times) double sum = (this.male + this.female + (male2 + female2) x times);if(sum != 0)this.male = (this.male + male2 x times) / sum;this.female = (this.female + female2
5、 x times) / sum;2、对年龄段的计算:public void protraitAge(double pAge1, double pAge2, double pAge3, double pAge4, double pAge5, long times) double sum = (age1 + age2 + age3 + age4 + age5 ) / 之前的APP的+ (pAge1 + pAge2 + pAge3 + pAge4 + pAge5 ) x times;/ 当前的APP的if(sum != 0)this.age1 = (pAge1 x times + age1) / s
6、um;this.age2 = (pAge2 x times + age2) / sum;this.age3 = (pAge3 x times + age3) / sum;this.age4 = (pAge4 x times + age4) / sum;this.age5 = (pAge5 x times + age5) / sum;表结构:用户画像本体表 字段名类型长度默认值说明备注日期记录历史时间MSISDNbyte16全F 号男性权重女性权重年龄段1权重年龄段2权重年龄段3权重年龄段4权重年龄段5权重汇总周期:每天汇总一次,建议当天凌晨统计前一天数据画像数据:+2SJcwT8h0TSsxV
7、d2pBMjA=|0.508|0.492|0.1|0.2|0.2|0.2|0.3|+2YYprC2jdMfQntMAn8lmA=|0.4|0.6|0.0|0.1|0.3|0.3|0.3|+2k9y/1uapW4IW6LUq0LGQ=|0.7|0.3|0.0|0.2|0.3|0.2|0.3|+3M/cSZerfq+XDC9kMWWcA=|0.5|0.5|0.1|0.2|0.2|0.2|0.3|+3NZW71R8R8nL78M3JB8tw=|0.5|0.5|0.1|0.2|0.2|0.2|0.3|+40FbnopHa5sY/CzDDf8cg=|0.5|0.5|0.0|0.2|0.3|0.2|0.3
8、|+5k9calLrKDGvHyzvO0pvg=|0.5|0.5|0.1|0.2|0.2|0.2|0.3|+5wU5NlU1iJUZ5sMN91DUw=|0.5|0.5|0.2|0.2|0.2|0.2|0.2|+69Ng7CRkKTr2hbYtgeiAw=|0.8|0.2|0.0|0.2|0.3|0.2|0.3|+6YeD7QUw8Hy6qN7Dxk7vQ=|0.8|0.2|0.0|0.2|0.3|0.2|0.3|+A4H4S+fiGw3pKi8xpwrw=|0.698|0.302|0.0|0.199|0.3|0.201|0.3|+AJEIaelS8LGbHqdDaorzg=|0.7|0.3|
9、0.0|0.6|0.3|0.05|0.05|+AbbMhECgaMivqZBr/U+Aw=|0.5|0.5|0.1|0.2|0.2|0.2|0.3|用户画像本体表数据入库hbase创立hbase表:create user_draw,NAME=draw,VERSIONS=1,BLOCKCACHE=true,BLOOMFILTER=ROW,COMPRESSION=SNAPPY,SPLITS = /,+,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N
10、,O,P,Q,R,S,T,U,V,W,X,Y,Z入库hbase代码:for (Text v2 : val) String splited = v2.toString().split(|);/rowkeyif(k2.toString().length()!=0)Put put = new Put(Bytes.toBytes(k2.toString();/跳过写入Hlog,提高写入速度put.setDurability(Durability.SKIP_WAL);put.add(Bytes.toBytes(draw), Bytes.toBytes(mdn), Bytes.toBytes(splite
11、d1);put.add(Bytes.toBytes(draw), Bytes.toBytes(male), Bytes.toBytes(splited2);put.add(Bytes.toBytes(draw), Bytes.toBytes(female), Bytes.toBytes(splited3);put.add(Bytes.toBytes(draw), Bytes.toBytes(age1), Bytes.toBytes(splited4);put.add(Bytes.toBytes(draw), Bytes.toBytes(age2), Bytes.toBytes(splited5
12、);put.add(Bytes.toBytes(draw), Bytes.toBytes(age3), Bytes.toBytes(splited6);put.add(Bytes.toBytes(draw), Bytes.toBytes(age4), Bytes.toBytes(splited7);put.add(Bytes.toBytes(draw), Bytes.toBytes(age5), Bytes.toBytes(splited8);context.write(NullWritable.get(), put);用户画像程序执行程序运行环境:hadoop集群、zookeeper、hbase。appTab.txt规那么库表hdfs路径:/home/appTab.txt程序执行jar包:userdraw.jar 程序执行命令:hadoop jar userdraw.jar 数据输入路径 job1输出路径 job2输出路径文件编码问题需要注意!