我的目标是将输入中的每个字段传递给UDF,如下所示:

A = LOAD './input/file1' USING PigStorage(' ') AS (f1:chararray, f2:chararray);
B = FOREACH A GENERATE com.mycompany.udf.FAKEUDF(tuple(*));

注意:我正在使用Cloudera的版本0.12.0-cdh5.0.0。
上面的FOREACH只是我的许多尝试之一。我看过类似的例子
...FAKEUDF(*)

依此类推。

主要问题是,正确的语法是什么?语法是否与早期版本有所不同?

这是一个显示星号语法的链接:

Chapter 10: Writing Evaluation & Filter Functions

最佳答案

这取决于您如何处理您的退货。参数将是列的名称(一个或多个),例如FAKEUDF(column1,column2,....),或者您可以为所有列指定*,例如FAKEUDF(*),也可以指定RelationName。在UDF中,您必须从元组中取出列值,例如:tuple.get(index)。您必须注意根据处理正在发送的参数作为参数。甚至可以是DataBag。

关于hadoop - Hadoop Pig拉丁元组:如何将它们传递给UDF?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23537297/

10-16 03:22