浏览 1240 次
锁定老帖子 主题:Pig使用问题总结
精华帖 (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 ; 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |