我正在做一个使用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所需的类。我甚至在加载了所有类的情况下也尝试了同样的方法,但仍然给了我同样的错误。发生什么事?请帮忙。谢谢!
2条答案
按热度按时间sqxo8psd1#
TransportSetupletoBag需要pig 0.11中的一个特性,在该特性中调用setudfcontextsignature。这用于区分udf的每次调用。此方法在pig 0.10中不存在。
wxclj1h52#
结果证明,linkedin的datafu是在Pig0.11.1上测试的,其他什么都没有。我运行的是pig0.10,所以它不起作用,因为pig0.10中可能没有设置某些属性,但是pig0.11.1中可能已经修复了这些属性。