16

实际上,我正在编写 PIG 脚本,如果满足其中一个条件,我想执行一组语句。

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

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

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

谢谢。

4

5 回答 5

22

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

Pig 的 if-then-else是一个算术运算符,使用简写“condition ? true_value : false_value”作为表达式的一部分调用,例如:

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

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

于 2013-09-30T17:10:28.240 回答
6

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

于 2013-07-16T07:44:33.057 回答
5

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

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

于 2013-07-17T11:36:32.617 回答
1

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

//(类似这样),假设你的 JavaUDF classUDFCondition & 生成的jar文件是PigUDFCondition.jar,然后在你的PIG Code

注册PigUDFCondition.jar

X = foreach A generate UDFCondition(..flag...)
于 2013-12-02T07:27:31.607 回答
0

从 0.12 版开始提供 CASE 声明。

于 2015-08-03T20:20:30.940 回答