如何通过使用Apache Pig解除引用来嵌套元组中的项目范围?

时间:2013-01-22 19:54:32

标签: syntax apache-pig

我有这样的元组:

(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

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

谢谢! URI

1 个答案:

答案 0 :(得分:1)

你有几个选择。如果你的元组不是太长,那么使用TOTUPLE内置UDF并单独列出每个成员有望过于繁琐:

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

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

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

我不确定您希望传递给UDF的是什么 - 一个较小的元组?或者来自原始元组的元素集合?根据您的UDF所做的事情,上述TOTUPLE可能是多余的。