我正在开发一个使用LinkedIn的datafu UDF编译的TransposeTupleToBag UDF的项目。在这里找到:https://github.com/linkedin/datafu/tree/master/src/java/datafu/pig/util。我在grunt shell中执行以下命令:
REGISTER jar-file;
DEFINE Transpose datafu.pig.util.TransposeTupleToBag();
a = load data 'file' using PigStorage(',') as (schema);
b = foreach a generate select_columns_from_schema;
c = foreach b generate col1, col2, datafu.pig.util.Transpose(col3, col4...coln);
当我执行最后一行时,我收到此错误:
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Instance name is null.
This should not happen unless UDFContextSignature was not set.
我做错了什么?怎么避免呢?我也没有更改任何代码。我只使用TransposeTupleToBag,FieldNotFound和AliasableEvalFunc,因为它们是成功运行Transpose所需的类。我甚至尝试了所有加载的类,它仍然给了我同样的错误。这是怎么回事?请帮忙。谢谢!
答案 0 :(得分:0)
事实证明,LinkedIn的数据已经在猪0.11.1上进行了测试,没有别的。我正在运行猪0.10,所以它不会起作用,因为有一些属性可能没有在猪0.10中设置,但也许在猪0.11.1中固定。
答案 1 :(得分:0)
TransposeTupleToBag需要Pig 0.11中的一个功能,其中调用setUDFContextSignature。这用于区分UDF的每次调用。 Pig 0.10中不存在此方法。