使用LinkedIn的datafu包时出错

时间:2013-09-19 22:49:13

标签: tuples apache-pig bigdata bag apache-datafu

我正在开发一个使用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 个答案:

答案 0 :(得分:0)

事实证明,LinkedIn的数据已经在猪0.11.1上进行了测试,没有别的。我正在运行猪0.10,所以它不会起作用,因为有一些属性可能没有在猪0.10中设置,但也许在猪0.11.1中固定。

答案 1 :(得分:0)

TransposeTupleToBag需要Pig 0.11中的一个功能,其中调用setUDFContextSignature。这用于区分UDF的每次调用。 Pig 0.10中不存在此方法。