使用Pig预测电信用户的移动路径
2014-07-20 11:08
134 查看
实战数据:
预期结果:
测试数据:
002|2014-09-10 00-09|东油大学
002|2014-09-10 09-17|学苑小区
001|2014-09-12 00-09|东油大学
001|2014-09-12 09-17|新玛特
002|2014-09-13 00-09|东油大学
002|2014-09-13 09-17|新玛特
003|2014-09-14 00-09|东油大学
003|2014-09-14 09-17|新玛特
003|2014-09-14 17-27|农垦大学
001|2014-10-10 00-09|东油大学
001|2014-10-10 09-17|学苑小区
Pig代码:
代码说明:
1.piggybank
api:http://pig.apache.org/docs/r0.13.0/api/
2.datafu
api:http://datafu.incubator.apache.org/docs/datafu/1.0.0/
下载地址:http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.linkedin.datafu%22
预期结果:
测试数据:
002|2014-09-10 00-09|东油大学
002|2014-09-10 09-17|学苑小区
001|2014-09-12 00-09|东油大学
001|2014-09-12 09-17|新玛特
002|2014-09-13 00-09|东油大学
002|2014-09-13 09-17|新玛特
003|2014-09-14 00-09|东油大学
003|2014-09-14 09-17|新玛特
003|2014-09-14 17-27|农垦大学
001|2014-10-10 00-09|东油大学
001|2014-10-10 09-17|学苑小区
Pig代码:
--加载数据 data = load '/user/hadoop/telecom/telecomdata' USING PigStorage('|') AS (imsi:chararray,time:chararray,loc : chararray); --转换格式 REGISTER /usr/local/pig-0.13.0/contrib/piggybank/java/piggybank.jar ; REGISTER /usr/local/pig-0.13.0/contrib/piggybank/java/lib/joda-time-2.1.jar ; DEFINE CustomFormatToISO org.apache.pig.piggybank.evaluation.datetime.convert.CustomFormatToISO(); toISO = FOREACH data GENERATE imsi, CustomFormatToISO(SUBSTRING(time,0,13), 'YYYY-MM-dd HH') AS time:chararray,loc; --按照用户imsi分组 grp = group toISO by imsi; describe grp; --调用Datafu的MarkovPairs把连续位置放在同一行 REGISTER /usr/local/pig-0.13.0/contrib/piggybank/java/lib/datafu-1.0.0.jar; define MarkovPairs datafu.pig.stats.MarkovPairs(); pairs = Foreach grp { sorted = ORDER toISO BY time; pair = MarkovPairs(sorted); generate Flatten(pair) as ( data:tuple(imsi,time,loc),next:tuple(imsi,time,loc)); } describe pairs; --展开数据 prj = foreach pairs generate data.imsi as imsi, data.time as time ,next,time as next_time , data.loc as loc ,next.loc as next_loc; --过滤不在同一天的数据 DEFINE ISODaysBetween org.apache.pig.piggybank.evaluation.datetime.diff.ISODaysBetween(); flt = filter prj by ISODaysBetween(next_time, time)==0L; describe flt; --分组计数 total_count = foreach (group flt by loc) generate group as loc,count(flt) as total; describe total_count; --计算连续位置对(pair)的数目 pairs_count = foreach (group flt by (loc, next_loc)) generate flatten (group) as (loc,next_loc),count(flt) as cnt; describe pairs_count; --表连接 jnd=join pairs_count by loc ,total_count by loc using 'replicated'; describe jnd; --计算相对频数,并保留前三 prob = foreach jnd generate pairs_count::loc as loc,pairs_count::next_loc as next_loc,(double)cnt / (double)total as probability; describe prob; top3 = foreach (group prob by loc) { sorted = order prob by probability desc; top = limit sorted 3; generate flatten (top); } describe top3; --输出数据 store top3 into 'output';
代码说明:
1.piggybank
api:http://pig.apache.org/docs/r0.13.0/api/
2.datafu
api:http://datafu.incubator.apache.org/docs/datafu/1.0.0/
下载地址:http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.linkedin.datafu%22
相关文章推荐
- 南昌地区使用“星空急速”的电信用户实现一台ADSL实现多机上网的方法
- MDaemon使用技巧大全--用户信件分路径存储
- 移动应用用户使用成本控制管理
- 使用CCUserDefault 判断用户是否是第一次登陆系统及UserDefault全路径的获取
- ubuntu下新建用户的终端不显示当前路径,不能用上下光标键得到使用过的命名解决办法
- 用户控件中使用相对路径问题
- ubuntu 新建用户后 不能使用TAB键、上下键,命令行不显示当前路径的解决
- 在VC中如何使用对话框让用户选择自己保存文件的路径
- 过半移动社交用户使用“拍照和上传”功能
- Iphone被刷机后用电信卡提示未激活,移动联通卡可以正常使用
- 迄今为止发现的最全最广且免费的电信方面的论坛(移动联通电信广电),非常使用,推荐之!
- 交互式让用户输入一个文件路径,判断文件是否存在,若存在判断文件类型,若文件是普通文件,不能使用wc。
- 在VC中如何使用对话框让用户选择自己保存文件的路径
- asp.net 用户控件中 使用相对路径的解决方法-------- 图片路径问题(用户控件、图片路径) ,ResolveUrl
- 分享一个检测用户使用的移动设备类型的php class
- 英语阅读推荐:创建Silverlight用户控件 & A*路径搜索中使用二叉堆
- 电信9530手机上面使用移动的SIM卡
- 2012年电信行业12大预测:印度用户超越中国
- ubuntu下新建用户的终端不显示当前路径,不能用上下光标键得到使用过的命名解决办法
- 电信运营商LBS应用,分析手机用户移动轨迹