0

col2の基準に基づいて2つのタプル(またはPigで呼び出されるもの)を分割し、を操作した後col2、別の列に分割して、2つの操作されたタプルを比較し、追加の除外を実行して、Pigスクリプトを実行したいと思います。

REGISTER /home/user1/piggybank.jar;

log = LOAD '../user2/hadoop_file.txt' AS (col1, col2);

--log = LIMIT log 1000000;
isnt_filtered = FILTER log BY (NOT col2 == 'Some value');
isnt_generated = FOREACH isnt_filtered GENERATE col2, col1, RANDOM() * 1000000 AS random, com.some.valueManipulation(col1) AS isnt_manipulated;

is_filtered = FILTER log BY (col2 == 'Some value');
is_generated = FOREACH is_filtered GENERATE com.some.calculation(col1) AS is_manipulated;
is_distinct = DISTINCT is_generated;

分割と操作は簡単です。これはそれが複雑になるところです。。。

merge_filtered = FOREACH is_generated {FILTER isnt_generated BY (NOT isnt_manipulated == is_generated.is_manipulated)};

この線を理解できれば、残りは適切な位置に収まります。

merge_ordered = ORDER merge_filtered BY random, col2, col1;
merge_limited = LIMIT merge_ordered 400000;

STORE merge_limited into 'file';

I/Oの例を次に示します。

col1                col2            manipulated
This                qWerty          W
Is                  qweRty          R
An                  qwertY          Y
Example             qwErty          E
Of                  qwerTy          T
Example             Qwerty          Q
Data                qWerty          W


isnt
E
Y


col1                col2
This                qWerty
Is                  qweRty
Of                  qwerTy
Example             Qwerty
Data                qWerty
4

1 に答える 1

2

何が必要かはまだよくわかりませんが、次の方法で入力と出力を再現できると思います(テストされていません)。

data = LOAD 'input' AS (col1:chararray, col2:chararray);
exclude = LOAD 'exclude' AS (excl:chararray);

m = FOREACH data GENERATE col1, col2, YourUDF(col2) AS manipulated;
test = COGROUP m BY manipulated, exclude BY excl;

-- Here you can choose IsEmpty or NOT IsEmpty according to whether you want to exclude or include
final = FOREACH (FILTER test BY IsEmpty(exclude)) GENERATE FLATTEN(m);

を使用してCOGROUP、グループ化キーによって各リレーションのすべてのタプルをグループ化します。fromのタプルのバッグexcludeが空の場合は、グループ化キーが除外リストに存在しなかったことを意味するため、mそのキーでタプルを使用しないようにします。逆に、グループ化キーがに存在する場合exclude、そのバッグは空にならず、mそのキーを持つタプルはフィルターで除外されます。

于 2012-11-19T18:36:51.743 に答える