2013-07-16 38 views
14

实际上,我正在写PIG脚本,并希望执行一组语句,如果其中一个条件满足。Apache PIG中是否有任何条件IF运算符?

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

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

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

谢谢。

+0

我遇到了Pig Latin中的条件运算符,如(a == b?c1:c2);。但是,我怎样才能插入大量的猪语句? –

+0

Bhavesh,你需要为它编写一个封装器。推荐的用于编写具有条件逻辑或 循环结构的程序的 方法是将Pig Latin嵌入另一种语言,如Python, JavaScript或Java,并从那里管理控制流。 – Nag

回答

4

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

3

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

您可以使用oozie及其decision结构与两个猪脚本。

22

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

猪的IF-THEN-ELSE用速记调用is an arithmetic operator“条件true_value:false_value”作为表达的一部分,如:

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

你必须已经加载了表A中做到这一点。要执行整个Pig语句的控制流程,您需要像Fakrudeen所建议的oozie之类的东西。

+0

这适用于基于正在处理的数据的条件,但不适用基于外部参数的条件/标志。 –

1

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

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

寄存器PigUDFCondition.jar

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

从0.12版开始就有CASE声明。

+0

这将如何帮助?你能通过一个例子来扩展你的答案吗? – dakab