2013-01-11 105 views
4

我有一個豬腳本,我正在加載一個數據集,將它分解爲兩個單獨的數據集,然後執行一些計算並最終爲其添加另一個計算字段。現在我想加入這兩個數據集。合併Pig中的兩個數據集

A = LOAD '/user/hdfs/file1' AS (a:int, b:int); 

A1 = FILTER A BY a > 100; 
A2 = FILTER A BY a <= 100 AND b > 100; 

-- Now I do some calculation on A1 and A2 

所以基本上,計算後,這裏是模式兩種:

{A1 : {a:int, b:int, type:chararray}} 
{A2: {a:int, b:int, type:chararray}} 

現在,在我這個轉儲回HDFS,我要合併這兩個數據集回來。類似於SQL中的UNION ALL。我怎樣才能做到這一點?

+1

另一方面,您可以使用SPLIT優化腳本(https://pig.apache.org/docs/r0.7.0/piglat in_ref2.html#SPLIT)代替FILTER。 –

回答

4

UNION應該爲你工作 - 但你的原始模式不符合顯示的輸出(b作爲chararray加載,後來變成int) - 我假設這是一個錯字。

如果元組在不同的順序領域,可以執行UNION時使用ONSCHEMA關鍵字:

A_MERGED = UNION ONSCHEMA A1, A2; 

編輯鏈接到PigLatin文檔爲UNION

+0

糟糕。錯誤。現在糾正它。 – divinedragon

+0

在這種情況下,執行UNION時不需要使用ONSCHEMA關鍵字。 –

+0

'''''ONSCHEMA''''的意義是什麼? – divinedragon

0

你可以使用SPLIT

SPLIT A INTO A1 IF a > 100, A2 IF a <= 100 AND b > 100; 
A = UNION A1, A2;