映射减少合并两个文件没有相同的密钥

时间:2013-12-16 21:17:29

标签: hadoop mapreduce apache-pig

我在HDFS中有两个文件。第一个文件包含一条记录,其中包含员工当天的开始时间和结束时间。他在凌晨5点进入系统并离开@2pm,系统记录开始时间,结束时间和持续时间。

文件2包含表示客户致电我们办公室的确切时间的记录。

我如何使用pig,m / r等这两个文件加入HDFS,给我一个代表每个客户的结果集,以及他们调用时可用的所有员工?

2 个答案:

答案 0 :(得分:0)

当你说时间时,我们谈论的精确度,分钟,秒?有一件事可以读取员工文件并假设我们正在讨论分钟级精度,保持输出(时间,empID)每分钟直到文件1中的每个条目结束。对于文件2,只发出(时间,客户ID)。现在reducer将做必要的

答案 1 :(得分:0)

这很有效,但由于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

file'c​​ustcalls':

101,0500
102,0630
103,0730
104,0830
105,0930
106,1210
107,1930