2016-02-23 78 views
0

我試圖計算具有ID列表的文件中重複且具有計數> 1的成員身份數的數目。我跑了以下,但有1個值我認爲這是隻是計算在MEMBERID列的行數:如何統計PIG中的重複值

ids = load 'ids'; 
ids = filter ids by id; 
group = group ids ALL; 
count = foreach group generate count (ids); 
dump count; 
+0

其實我的文件有2列,一個id列和一個created列。我如何計算從今天起30天內創建日期的id> 1的數量? – Tai

回答

0

我假設該文件是製表符分隔。

A = LOAD '/test.txt' USING PigStorage('\t') AS (id:int,create_dt:chararray); 
B = FILTER A BY (id > 1 and DaysBetween(CurrentTime(),ToDate(create_dt)) == 30); 
C = GROUP B BY id; 
D = FOREACH C GENERATE group as id,COUNT(B) as totalcount; 
DUMP D; 
+0

謝謝!實際上,有問題的部分是你的「B」。我該如何修改它,以便它只能提取重複的Ids?因此,例如,如果我有一個ID爲2345,並且「2345」在文件中出現了3次,我希望在輸出中獲得這個ID號的列,第二列是它出現的次數所以在這個例子中它會在第二列顯示「3」。 – Tai

+0

在您的問題評論中,您要求計數ID> 1,現在您要求計數ID> 1的計數ID。只需從'B'篩選器中移除(id> 1和)。然後添加E = FILTER D BY totalcount> 1; DUMP E; –

+0

謝謝@inquisitive_mind,你很虔誠 – Tai