下面的代碼工作得很好,但是當我已經有兩個現有的袋(與他們的別名,假設S1和S2用於表示兩套兩個現有的袋),不知道如何調用UDF setDifference產生設置差異?我認爲如果我手動構建一個額外的包,使用我現有的輸入袋(S1和S2),這將是額外的開銷?Hadoop的豬UDF調用的問題,
register datafu-1.2.0.jar;
define setDifference datafu.pig.sets.SetDifference();
-- ({(3),(4),(1),(2),(7),(5),(6)} \t {(1),(3),(5),(12)})
A = load 'input.txt' AS (B1:bag{T:tuple(val:int)},B2:bag{T:tuple(val:int)});
F1 = foreach A generate B1;
F2 = foreach A generate B2;
differenced = FOREACH A {
-- input bags must be sorted
sorted_b1 = ORDER B1 by val;
sorted_b2 = ORDER B2 by val;
GENERATE setDifference(sorted_b1,sorted_b2);
}
-- produces: ({(2),(4),(6),(7)})
DUMP differenced;
更新:
的問題是,假設我有兩個包已經,如何調用UDF setDifference得到一套區別在哪裏?我是否需要製造另一個包含兩個獨立包的超級包?謝謝。
在此先感謝, 林
感謝的,你的意思是與F1和F2調用setDifference作爲輸入參數?謝謝。 –
@ LinMa:在上面的代碼片段中,我沒有看到別名F1和F2的需要。參考。第一個鏈接共享我們有一個使用SetDifference方法的例子。 –
對不起,我可能不清楚我的問題。我的意思是如果我已經有兩個包,如何調用UDF setDifference?在代碼示例中,它似乎假定從具有兩個包的文件讀取。 –