マップを操作する唯一の方法は、#
演算子を使用することです。より多くの機能を持たせるために、いくつかのUDFを定義する必要があります。したがって、純粋な pig でマップを実際に使用できる唯一の方法は、次のようになります。
B = FOREACH A GENERATE M#'open' ;
出力としてこれを生成します:
(apache)
()
の後の値#
は引用符で囲まれた文字列であり、変更できず、ジョブを実行する前に設定する必要があることに注意してください。
また、2 行目には NULL が作成されることに注意してください。これは、そのマップには値が「open」のキーが含まれていないためです。これは、キーと値の 2 つの文字配列のスキーマで FILTER を使用する場合とは少し異なります。
B = FILTER A BY key=='open' ;
次の出力が生成されます。
(open,apache)
値のみが必要な場合は、次の方法で簡単に実行できます。
B = FOREACH (FILTER A BY key=='open') GENERATE value ;
生成するもの:
(apache)
NULL を保持することが重要な場合は、bincondを使用して生成することもできます。
B = FOREACH A GENERATE (key=='open'?value:NULL) ;
と同じ出力を生成しM#'open'
ます。
私の経験からすると、マップは非常に限定的であるため、あまり役に立ちません。