0

我有这样的元组:

(a: (b:int, c:int, d:int, e:int))

我想调用一个 UDF 并传递一个嵌套元组的范围。这就是我期望的命令:

FOREACH alias GENERATE myUDF(a.(c .. e));

但这给了我一个错误

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 12, column 133>  mismatched input '(' expecting SEMI_COLON

执行此操作的正确方法是什么?

谢谢!乌里

4

1 回答 1

1

你有几个选择。TOTUPLE如果您的元组不太长,希望使用内置 UDF 并单独列出每个成员不会太麻烦:

FOREACH alias GENERATE myUDF(TOTUPLE(a.c, a.d, a.e));

但是您可能会问这个问题,因为这对您的应用程序来说很麻烦。在这种情况下,你可以从FLATTENing 元组开始,然后做一个范围:

FOREACH (FOREACH alias GENERATE FLATTEN(a)) GENERATE myUDF(TOTUPLE(a::c .. a::e));

我不确定您希望传递给 UDF 的确切内容——一个较小的元组?还是原始元组中的元素集合?根据您的 UDF 所做的事情,上述TOTUPLEs 可能是多余的。

于 2013-01-22T20:47:52.980 回答