我正在研究對原始事務執行重型數據處理並提出各種事務模式的PIG腳本。爲Hadoop/PIG輸出數據分配ID
說一種模式是 - 查找一天中接收到跨境交易的所有賬戶(包括總交易量和交易金額)。
我的預期輸出應該是兩個數據文件 1)彙總數據 - 與賬戶A1類似,從AU國家收到50筆交易。 2)原始交易 - A1以上的所有交易超過50筆。
我的腳本PIG當前在以下格式創建輸出數據源
帳戶國家TotalTxns RawTransactions
A1 AU 50 [(TXN1),(Txn2),(Txn3)....(Txn50) ]
A2 JP 30(TXN1),(Txn2)......(Txn30)
是現在的問題在這裏,當我得到這個數據從Hadoop的系統(在一定DB)我想在我的彙總記錄(A1,AU,50)與所有50個原始交易(例如r用作所有50個關聯的Txns的外鍵的ollup記錄)。
我知道被分配的Hadoop不應該用於分配ID,但是在那裏我可以分配非唯一ID(不需要按順序)或其他方式來鏈接這些數據嗎?
編輯(使用枚舉從DataFu後) 這裏是PIG腳本
register /UDF/datafu-0.0.8.jar
define Enumerate datafu.pig.bags.Enumerate('1');
data_txn = LOAD './txndata' USING PigStorage(',') AS (txnid:int, sndr_acct:int,sndr_cntry:chararray, rcvr_acct:int, rcvr_cntry:chararray);
data_txn1 = GROUP data_txn ALL;
data_txn2 = FOREACH data_txn1 GENERATE flatten(Enumerate(data_txn));
dump data_txn2;
運行此之後,我得到
ERROR org.apache.pig.tools.pigstats.SimplePigStats - 錯誤2997:無法重新創建從後備錯誤異常:java.lang.NullPointerException at datafu.pig.bags.Enumerate.enumerateBag(Enumerate.java:89) at datafu.pig.bags.Enumerate.accumulate(Enumerate.java :104) ....
如果UUID不是一個選項,你的數據庫模式使用數字作爲ID,你可以編寫一個UDF來完成http://stackoverflow.com/questions/11737750/how-to-handle-id-generation- on-a-hadoop-cluster/11748679#11748679。 – alexeipab