查看更多Apache Pig的教程请点击这里。
▶▶ LIMIT操作并不会减少读入的数据量
如果你只需要输出一个小数据集,通常你可以使用LIMIT来实现,例如:
A = LOAD '1.txt' AS (col1: int, col2: chararray);
B = LIMIT A 5;
DUMP B;
Pig会只加载5条记录,就不再读取其他的记录了吗?答案是:不会。Pig将读取数据文件中的所有记录,然后再从中挑5条。这是Pig可以做优化、却没有做的一点。
【更新】Pig 0.10已经有了这功能了:
Push Limit into LoaderPig optimizes limit query by pushing limit automatically to the loader, thus requiring only a fraction of the entire input to be scanned.
文章来源:http://www.codelast.com/
▶▶ 使用UDF不一定要在Pig脚本中REGISTER,也可以在命令行指定
大家知道,使用UDF需要在Pig脚本中REGISTER该UDF的jar包,但你可能不知道,你也可以不在Pig脚本中REGISTER它,而是通过命令行指定:
pig -Dpig.additional.jars=/home/codelast/a.jar:/home/codelast/b.jar:/home/codelast/c.jar test.pig
以上命令告诉了我们几件事:
①我们让Pig执行了test.pig脚本;
②我们向Pig传入了“pig.additional.jars”这样一个参数,此参数的作用相当于在Pig脚本中REGISTER jar包;
③如果你要REGISTER多个jar包,只需像上面的例子一样,用分号(:)把多个jar包路径隔开即可;
④test.pig必须写在最后,而不能写成“pig test.pig -Dpig.additional.jars=XXX”这样,否则Pig直接报错:
ERROR 2999: Unexpected internal error. Encountered unexpected arguments on command line - please check the command line.
当然,为了可维护性好,你最好把REGISTER jar包写在Pig脚本中,不要通过命令行传入。