HDFS中有两个文件。第一个文件包含一条记录,其中包含员工一天的开始时间和结束时间。他早上5点登录系统,下午2点离开,系统记录开始时间、结束时间和持续时间。
文件二包含代表客户致电我们办公室的确切时间的记录。
我如何在HDFS中加入,使用pig、m/r等,这两个文件,给我一个代表每个客户的结果集,以及他们呼叫时可用的所有员工?
当你说时间时,我们谈论的精度是多少,分,秒??一件事可以是读取员工文件,假设我们谈论的是分钟级别的精度,那么对于文件1中的每个条目,保持每分钟输出(时间,empID)直到结束。对于文件2,只发出(时间,客户Id)。现在reducer将执行必要的
这是有效的,但由于CROSS
的原因,对于大型数据集来说,它可能会非常昂贵。
EmpInOut = LOAD 'empdata' using PigStorage(',') as (empID:int, logInTime:int, logOutTime:int);
CustCalls = LOAD 'custcalls' using PigStorage(',') as (custID:int, callTime:int);
BigMess = CROSS CustCalls, EmpInOut;
EmpsAvail = FILTER BigMess BY logInTime <= callTime AND logOutTime >= callTime;
Answer = GROUP EmpsAvail BY (custID, callTime);
DUMP Answer;
我使用这些数据文件进行了测试:
文件"empdata":
0,0600,1200
1,0700,1400
2,0800,1600
3,0900,1200
4,1000,1900
5,1100,1900
6,1200,2000
文件"客户调用":
101,0500
102,0630
103,0730
104,0830
105,0930
106,1210
107,1930