Mapreduce 你能把三元运算符和STORE in pig一起使用吗

Mapreduce 你能把三元运算符和STORE in pig一起使用吗,mapreduce,apache-pig,ternary-operator,Mapreduce,Apache Pig,Ternary Operator,在apache pig中,如果我想有条件地存储一些数据,并尝试这样做: data1 = ....; data2 = ....; STORE (condition ? data1 : data2) INTO '$output' USING PigStorage(","); --assuming pig is smart enough not to run the query for data1 or data2 depending on the condition 然后我得到一个语法错误: SE

在apache pig中,如果我想有条件地存储一些数据,并尝试这样做:

data1 = ....;
data2 = ....;
STORE (condition ? data1 : data2) INTO '$output' USING PigStorage(",");
--assuming pig is smart enough not to run the query for data1 or data2 depending on the condition
然后我得到一个语法错误:

SEVERE: exception during parsing: Error during parsing. <file test.pig, line 38, column 6>  Syntax error, unexpected symbol at or near '('
Failed to parse: <file test.pig, line 38, column 6>  Syntax error, unexpected symbol at or near '('

我是否在pig中错误地使用了三元运算符,如果不可能,是否有其他方法可以在pig中实现条件存储,最好不用编写UDF。

您不能像在问题中尝试的那样在STORE语句中使用三元运算。 您可以将条件列添加到data1和data2,然后获取一个联合,然后根据条件值过滤联合的数据

data1 = ....
data1a = CROSS data1, condition;

data2 = ....
data2a = CROSS data2, condition;

data12 = UNION data1a, data2a;
final = FILTER data12 BY condition == true;

STORE final INTO '$output' USING PigStorage(",");

希望这有帮助。

数据1和数据2的模式是什么?它们是一样的吗?@GauravPhapale是的,在这种情况下它们是一样的,但我觉得这不重要。只是在假设相同模式的情况下添加了答案。这需要计算两种关系,我希望避免这种情况,基本上我希望能够配置以某种方式运行它。我承认优化器解决这个问题的可能性很小,但我对此表示怀疑。另外,您可能需要编辑答案,使其在data2ano中没有条件。PIG没有那么聪明。另外,我不认为我们可以有条件地评估PIG中的一个关系。我最初的尝试是希望很容易看到其中一个关系从来没有输出过,并对其进行优化,唯一的问题是三元函数不能输出别名,我猜我没有得到你的答案。是否要避免“评估”关系1或“输出”关系1?评估是不可能的。