我有这样的元组:
(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
答案 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
可能是多余的。