pig的udf相关

10 篇文章 0 订阅
3 篇文章 0 订阅

一:python

先记下官方的一个极经典例子

#######################
 # Data Type Functions #
 #######################
 #collectBag- collect elements of a bag into other bag
 #This is useful UDF after group operation
 @outputSchema("y:bag{t:tuple(len:int,word:chararray)}") 
 def collectBag(bag):
   outBag = []
   for word in bag:
     tup=(len(bag), word[1])
     outBag.append(tup)
   return outBag

数据类型的传入传出:pig里的bag对应到python的list,tuple对应到python的列表,当然列表里可以包含list

1 pig传入python,设pig传入一个bag B,里面含有很多tuple T,则传入python后都变成一个list B了,如果要访问B的第一个元组则,用下标B[0],如果要访问B的第一个元组T的第一个元素,则用下标B[0][0]。另外,B里面还可以包含bag(其实是tuple T 包含的),设T里包含bag A,A有很多个tuple Ta,假设A在tuple T 的第3个索引(从0开始数),则访问B的第一个T里A的第一个tuple的第一个元素方法是 B[0][3][0][0]。

2 从python 传出到pig,简单的数据类型好说,下面只说传出bag的情况(也即输入一个bag给python的udf处理,udf处理完以后再把处理完的bag扔回pig,两个bag的结构可以不一样),bag对应到pig里是一个list所以outBag=[]这个固定在udf代码第一行,return outBag这个固定在udf代码最后一行。pig里bag的tuple对应到python的tuple(列表,列表不同于list,列表不能append,也不能修改,其实看成一个字符串都可以,列表和简单数据类型是python里key可以的类型,即可hash化)。所以bag每加一个tuple,udf里要有如下代码:


tup=(len(bag), word[1])
outBag.append(tup)

另外注意,pig脚本里matches后的正则表达式字符串,所有的元字符都要多加一个反斜杠。

pig中可以直接使用java中的静态函数

托管java中的静态函数(效率较低)

--invoker.pig
define hex InvokeForString('java.lang.Integer.toHexString', 'int');
divs  = load 'NYSE_daily' as (exchange, symbol, date, open, high, low,
            close, volume, adj_close);
nonnull = filter divs by volume is not null;
inhex = foreach nonnull generate symbol, hex((int)volume);

二,java

1) 压缩jar -cvf test.jar test

2) 解压jar -xvf test.jar test


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlingh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值