使用Pig预测电信用户的移动路径
实战数据:

预期结果:

测试数据:
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
使用Pig预测电信用户的移动路径的更多相关文章
- xp默认安装路径及本地用户配置文件存放路径修改
xp默认安装路径及本地用户配置文件存放路径修改 修改注册表可能会造成您的系统崩溃或数据丢失,请先行备份操作系统,以备不测!!! 备份注册表步骤: 1.在“桌面”上按快捷键“Ctrl+R”,调出“运行” ...
- C#获取“所有用户桌面”的路径
想用C#得到The All Users Desktop(Public\Desktop)的路径. 原来以为很简单,然而 Environment.GetFolderPath(Environment.Spe ...
- windows API实现用户选择文件路径的对话框
在编写应用程序时,有时需要用户选择某个文件,以供应用程序使用,比如在某些管理程序中需要打开某一个进程,这个时候需要弹出一个对话框来将文件路径以树形图的形式表示出来,以图形化的方式供用户选择文件路径,而 ...
- 销量预测和用户行为的分析--基于ERP的交易数据
写在前面: 这段时间一直都在看一些机器学习方面的内容,其中又花了不少时间在推荐系统这块,然后自己做了一套简单的推荐系统,但是跑下来的结果总觉得有些差强人意,我在离线实验中得到Precision,Rec ...
- 通过脚本命令cacls提升某个用户都某路径的操作权限
摘要----项目需要对服务器上的某个路径下的目录,修改权限:给Users用户组的用户添加修改写入权限. 原理----通过批处理脚本实现,命令使用 icacls 修改ACL 来达到修改权限的目的. 操作 ...
- 修改用户的home路径
1.直接修改/etc/passwd文件 2.usermod -d /hadoop -u 1531 附:usermod详细参数 语 法:usermod [-LU][-c <备注>][-d & ...
- C# 判断用户是否对路径拥有访问权限
如何获取当前系统用户对文件/文件夹的操作权限? 1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.GetAccessCon ...
- Ubuntu转到root用户后用户名路径没有颜色
看到好多都直接把普通会用户的.bashrc配置复制到root家目录下,由于本人小白,很多.bashrc配置看不懂,也不敢随便修改.于是找到别的配置方法. 普通用户的os@a:~$和root用户的roo ...
- cookie记录用户的浏览商品的路径
在电子商务的网站中,经常要记录用户的浏览路径,以判断用户到底对哪些商品感兴趣,或者哪些商品之间存在关联. 下面将使用cookie记录用户的浏览过的历史页面.该网站将每个页面的标题保存在该页面的$TIT ...
随机推荐
- Java中静态代码块,代码块,构造方法的理解
直接贴代码 class A { static { System.out.println("父类静态代码区"); } { System.out.println("父类代码区 ...
- jquery中的 .html(),.val().text()
.html(),.text(),.val(),.html()用为读取和修改元素的HTML标签,包括标签内的内容.text()用来读取或修改元素的纯文本内容,去除 html 标签.val()用来读取或修 ...
- 苹果ios、ipad加密视频播放器使用教程
操作流程 温馨提示 播放时,请务必保证播放设备联网(原因:用户名权限验证需要网络,播放后10秒即可关闭网络) a) 请在苹果商店下载并安装app播放器:DrmPlayer b) 选择已 ...
- 数据库创建&数据表创建
--第2_1题创建数据库 create database Student201038897041 on primary (name='student1', filename='F:\coures\SQ ...
- properties文件的继承(套用)关系
现项目中有多个配置文件分布于/props____def.properties____/env_______def.propertiess_______/dev_______def.properties ...
- CentOS6.6源码编译升级GCC至4.8.2
升级前提 源码编译需要至少要有一个可用的gcc编译器. 可以用过yum自动安装或者手动下载rpm包安装. 通过yum可以看到至少需要下面这些安装包,所以可以到许多rpm package站点中搜索下载相 ...
- php操作memcache的用法、详解和方法介绍
1.简介 memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态web程序时减少对数据库的访问. memcache也提供用于通信对话(sess ...
- js 获取时间 new Date()详细介绍
javaScript系列:js中获取时间new Date()详细介绍 (2012-03-31 09:54:25) 转载▼ 标签: js时间 new date() 字符类型 转换 分类: study-j ...
- DISC免费性格测试题
现在给大家推荐一款世界500强和猎头公司招聘人才时用的DISC性格测评,用在找对象方面也比较合适.大家不妨看下自己的性格,就知道该找什么样的意中人啦--- 在每一个大标题中的四个选择题中只选择一个最符 ...
- hadoop1中hdfs原理详解
HDFS是Hadoop Distribute File System的简称,也是Hadoop的一个分布四文件系统 一.HDFS的主要设计理念 1.存储超大文件 这里的 “超大文件” 是指几百MB .G ...