私はPigスクリプトの初心者で、いくつかの既存のブタスクリプトを修正して、ログファイルからいくつかのデータを抽出しようとしています。Pigの列で2つの関係を結合しフィルタリングする方法は?
など。
message Class {
message Student {
optional int32 uid = 1;
optional string name = 2;
}
optional int32 cid = 1;
repeated Student students = 2;
}
はロード後、私は(たとえば、BAG1)は(私が間違っているなら、私を修正)が作成された袋を考える:私は2つのログファイル、などのスキーマを持つものを持っている
bag1:
{
(uid1, {(cid11, name11), (cid12, name12), (cid13, name13), ...}),
(uid2, {(cid21, name21), (cid22, name22), (cid23, name23), ...}),
...
}
そして、別のログファイルはシンプルなので、結果として得られるbag(bag2)は次のようなものです。私はいくつかの参加/フィルタを行う必要があると思う
result bag:
{
(uid1, (name11, name13)),
(uid2, (name22)),
}
:ように私が欲しいもの
bag2:
{
(name11),
(name13),
(name22),
...
}
は、bag2で任意の名前が行の内部に含まれている場合BAG1からすべての行を取得し、ありますこれらの2つの袋には、しかし、どのようにわからない。 以下のようなスクリプトスニペットを試しましたが、有効なスクリプトではありません。
res = FOREACH bag1 {
names = FOREACH students GENERATE name;
xnames = JOIN names by name, bag2 by name;
GENERATE cid, xnames;
};
FILTER res BY not IsEmpty(xnames);
誰もが可能です。スクリプトに関する助けを私にくれますか?