web-dev-qa-db-ja.com

Apache PIGに条件付きIFのような演算子はありますか?

実際、私はPIGスクリプトを書いていて、条件の1つが満たされた場合にステートメントのセットを実行したいと考えています。

1つの変数を設定し、その変数の値を確認しました。と思います

if flag==0 then
  A = LOAD 'file' using PigStorage() as (f1:int, ....);
  B = ...;
  C = ....;
else 
  again some Pig Latin statements

PIGスクリプトでこれを行うことはできますか?はいの場合、どうすればこれを実行できますか?

ありがとう。

16
Bhavesh Shah

はい、Pigはif-then-else構成を提供していますが、あなたが求めている方法では使用されていません。

Pigのif-then-else は算術演算子です は、次のような式の一部として「条件?true_value:false_value」という省略形で呼び出されます。

X = FOREACH A GENERATE f2, (f2==1?1:COUNT(B));

これを行うには、テーブルAをすでにロードしている必要があります。 Fakrudeenによって提案されているように、Pigステートメント全体で制御フローを実行するには、 oozie のようなものが必要です。

22
Will High

Python Pigスクリプトのラッパーを作成できます。ドキュメントの Embedded Pig を参照してください。

6
Lorand Bendig

Pigはデータフロー言語であり、制御フローではありません。接近する構成要素はPIG split だけですが、非常に制限されています。

oozie とその decision 構文を2つのpigスクリプトで使用できます。

5
Fakrudeen

[〜#〜] udf [〜#〜](たとえば、Javaで)を作成し、それをPIGスクリプトに埋め込みます。 [〜#〜] udf [〜#〜]を書き込んだ後に生成するjarファイルを「登録」する必要があります。

//(このようなもの)、あなたのJava UDF classUDFConditionです。生成されたjarファイルはPigUDFCondition.jarであり、次にPIG Code

登録PigUDFCondition.jar

X = foreach A generate UDFCondition(..flag...)
1
Rahul Dhond

バージョン0.12以降で利用可能なCASEステートメントがあります。

0
ganeshrj