论坛首页 综合技术论坛

Pig使用问题总结

浏览 1237 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2015-03-29  

1,如果是a::tags#'pic'作为参数,传递给另一个函数方法,需要转义多次,

二次调用函数,就是这个方法里,又调用了其他方方法,参数也是层层传递,需要转义两次,尤其是map里的函数,
C1 = two_use_cart_filter_by_clkloc_distinct_vid_and_ic(C,0,2,'vid','cvid','tags#\\\'pic\\\'','cpic') ;

一次调用函数,只需转一次即可
cx = get_distinct_data_by_field(cx,B::vid,'bvid','B::tags#\'pic\'','bpic') ;

2,在pig函数中,如果传入的变量join后有别名的标量,不要使用A:tags#'et'语法写,直接使用tags#'et'引用


3,在function脚本中,
注册变量,必须使用单引号引起来 ,如下
REGISTER '/home/lib/dhpig.jar';
REGISTER '/home/lib/event-log.jar';
在非函数脚本中,则不需要

4, 在a.pig脚本中,如果引用了一个函数脚本function.pig,则注意a脚本的参数名字,不能和function.pig脚本中函数名字一样

5,单引号里嵌套单引号,需要转义使用

6,在a.pig中,引用了一个b.pig 如果b.pig 里面 定义了一个函数,然后别名x,
在a.pig里面使用 x2 = getx()接收,此时需要注意,x2 不能够和b.pig里面的函数里面加载数据的schema的别名一样 ,如果getx里面
有这么一段代码:
bb = load  'xx' as (x2:chararray)
 

7, a和b通过join后的得到的一个结果集r,如果传给下一个函数使用时,需要采用r::a::xx引用
如果有扩展字段,可以使r::a::map#'field'引用
 
 
8, 在使用转换一些类型时候,如果默认不设置任何schema,那么它将会是bytearray类型,如果想进行一些join操作,或者union,cross操作时,
一定要确保两边的join键的字符类型一致
ho = join $a by bvik left outer , $b by okey; ,如果bvik和okey的字符类型不一致,那么将会出现如下异常:
                        int errCode = 1075;
                        String msg = "Received a bytearray from the UDF. Cannot determine how to convert the bytearray to string.";
所以在,进行join前,一定确保类型一致,如下面的pig语句:$11和$3是要明确声明所属类型的
mz = foreach mf generate CONCAT((chararray)$11,(chararray)$3) as vidic , $4 as gno:chararray ;
mp = group mz by vidic;
$ord = foreach mp generate  group  as okey , BagToString($1.$1,'#') as rfxnos  ;



论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics