2012-11-18 112 views
0

我是hadoop和猪的新手。我想知道如何运行一个内部调用UDF方法的猪脚本?事情是我没有看到像猪UDF手册上提及的声明“注册blah.jar”:用hadoop上的udf运行猪脚本

register myudfs.jar; 
A = load 'student_data' as (name: chararray, age: int, gpa: float); 
B = foreach A generate flatten(myudfs.Swap(name, age)), gpa; 
C = foreach B generate $2; 
D = limit B 20; 
dump D; 

但我确实看到一个包含“blah.jar”一个“罐子”目录。我的同事已经离开了,所以我想知道这有什么窍门?也许我可以将jar文件添加到命令行?

非常感谢!

+0

您是否尝试过运行该脚本?如果是这样,你是否收到错误信息?被称为UDF的名称是什么? –

+0

如果您可以回答@ WinnieNicklaus的问题,那将有助于我们理解问题的可能性。这个问题太多了。 – Dan

+0

小熊和丹,我没有试过运行脚本。因为我实际上有两个问题(或更多)。首先,我不确定我能够如何生成myudfs.jar。所以在我的Mac上,我应该在eclipse上打开一个项目并添加猪的lib/jar,然后编写UDF并将所有内容都包装到myudfs.jar中?其次,在脚本中,我真的需要“注册myudfs.jar”吗?如果不是,猪如何找到罐子? – trillions

回答

1

如果脚本中没有REGISTER语句(且脚本有效),那么它不会调用任何可能的Pig的builtin functions以外的任何UDF。如果你想使用UDF,你将需要一个REGISTER声明。如果没有UDF被调用,那么REGISTER是不必要的,这可能是为什么你没有在你的脚本中看到它。

Here是编写UDF的很好的参考。写完之后,你需要将它编译成一个jar文件,并确保包含它所依赖的任何类(如EvalFunc)。这是你将会REGISTER的罐子。

+0

非常感谢,小熊!我现在对在工作中阅读的脚本感到惊讶,它调用了一些UDF,但在脚本的顶部没有注册...但是至少我可以首先构建自己的UDF以了解如何在脚本中运行它,然后我会了解更多:)真的很感谢你的帮助! :) – trillions