Apache PIG中是否有任何条件IF运算符?

时间:2013-07-16 06:31:03

标签: hadoop apache-pig

实际上我正在编写PIG脚本,并希望在满足其中一个条件时执行一些语句。

我设置了一个变量并检查该变量的某些值。假设

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

我可以在PIG脚本中执行此操作吗?如果是,那我该怎么办?

感谢。

5 个答案:

答案 0 :(得分:22)

是的,Pig确实提供了if-then-else结构,但它没有按照你要求的方式使用

Pig的if-then-else is an arithmetic operator使用简写“condition?true_value:false_value”作为表达式的一部分进行调用,例如:

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

您必须已经加载了表A才能执行此操作。要按照Fakrudeen的建议执行围绕整个Pig语句的控制流,你需要oozie之类的东西。

答案 1 :(得分:5)

您可以围绕Pig脚本创建Python包装器。请参阅文档中的Embedded Pig

答案 2 :(得分:4)

Pig是数据流语言而非控制流。 只有接近的构造是PIG split,但它非常有限。

您可以将oozie及其decision构造与两个猪脚本一起使用。

答案 3 :(得分:1)

创建 UDF (例如,在Java中),然后将其嵌入到 PIG脚本中。在编写 UDF 后,您需要“注册”您生成的jar文件。

//(类似这样),说你的Java UDF classUDFCondition&生成的 jar 文件为 PigUDFCondition.jar ,然后在您的PIG Code

注册 PigUDFCondition.jar

X = foreach A generate UDFCondition(..flag...)

答案 4 :(得分:0)

从版本0.12开始提供CASE声明。