如何使用ApachePig通过取消引用在嵌套元组中投影范围?

jucafojl  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(337)

我有这样的元组:

(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

esyap4oy

esyap4oy1#

你有几个选择。如果您的元组不太长,希望使用 TOTUPLE 内置自定义项并分别列出每个成员:

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什么——一个更小的元组?还是原始元组中的元素集合?根据您的自定义项所做的,上述 TOTUPLE 可能是多余的。

相关问题