实际上我正在编写PIG脚本,并希望在满足其中一个条件时执行一些语句。
我设置了一个变量并检查该变量的某些值。假设
if flag==0 then
A = LOAD 'file' using PigStorage() as (f1:int, ....);
B = ...;
C = ....;
else
again some Pig Latin statements
我可以在PIG脚本中执行此操作吗?如果是,那我该怎么办?
感谢。
答案 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)
答案 3 :(得分:1)
创建 UDF (例如,在Java中),然后将其嵌入到 PIG脚本中。在编写 UDF 后,您需要“注册”您生成的jar文件。
//(类似这样),说你的Java UDF class
是UDFCondition
&生成的 jar 文件为 PigUDFCondition.jar ,然后在您的PIG Code
注册 PigUDFCondition.jar
X = foreach A generate UDFCondition(..flag...)
答案 4 :(得分:0)
从版本0.12开始提供CASE声明。