私は、生のトランザクションでヘビーデューティーデータ処理を実行し、さまざまなトランザクションパターンを考え出すPIGスクリプトに取り組んでいます。
パターンの1つを言うと、1日に国境を越えたトランザクションを受け取ったすべてのアカウントを検索します(トランザクションの合計とトランザクションの量を含む)。
私の期待する出力は2つのデータファイルであるはずです。1)ロールアップデータ-アカウントA1がオーストラリア国から50件のトランザクションを受け取ったように。2)生のトランザクション-A1の50を超えるすべてのトランザクション。
私のPIGスクリプトは現在、次の形式で出力データソースを作成しています
アカウント国TotalTxnsRawTransactions
A1 AU 50 [(Txn1)、(Txn2)、(Txn3)....(Txn50)]
A2 JP 30 [(Txn1)、(Txn2)....(Txn30)]
ここでの質問は、このデータをHadoopシステムから(一部のDBに)取得するときに、ロールアップレコード(A1、AU、50)と50個の生のトランザクションすべて(外部として使用されるロールアップレコードのID 1など)との間にリンクを確立したいということです。関連する50のTxnsすべてのキー)。
配布されているHadoopをIDの割り当てに使用するべきではないことは理解していますが、一意でないID(順次である必要はありません)またはこのデータをリンクする他の方法を割り当てることができるオプションはありますか?
EDIT(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;
これを実行した後、私は得ています
エラーorg.apache.pig.tools.pigstats.SimplePigStats-エラー2997:バックエラーから例外を再作成できません:datafu.pig.bags.Enumerate.enumerateBag(Enumerate.java:89)のjava.lang.NullPointerExceptionがdatafu.pigにあります.bags.Enumerate.accumulate(Enumerate.java:104)...。