2013-12-16 25 views
0

我在HDFS中有兩個文件。第一個文件包含一條記錄,其中包含員工一天的開始時間和結束時間。他在早上5點檢查系統,並在@ 2pm離開系統並記錄開始時間,結束時間和持續時間。映射減少合併兩個文件沒有相同的密鑰

文件2包含的記錄代表客戶稱爲我們辦公室的確切時間。

如何使用pig,m/r等這兩個文件加入到HDFS中,給我一個表示每個客戶的結果集,以及他們所有可用的員工叫什麼名字?

回答

0

當你說時間時,我們談論什麼精度,分鐘,秒?有一件事可能是讀取員工文件,並假設我們正在談論分鐘級別的精度,對於文件1中的每個條目,每分鐘持續輸出(時間,empID)直到結束。對於文件2,只是發出(時間,客戶ID)。現在減速機會做需要的

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 

文件 'custcalls':

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