美文网首页
Python Pig UDF函数

Python Pig UDF函数

作者: NEO_X | 来源:发表于2020-02-09 16:24 被阅读0次

更多信息https://blue-shadow.top/
附书代码Github工程:https://github.com/Shadow-Hunter-X

Pig和Hadoop都是Java编写的。Java也是编写UDF的原生语言,但通过Java进行编写需要通过编译打包成Jar包后进行部署,过程是很繁琐的。但通过Python编写UDF是很方便快捷的,至少在功能测试阶段是这样很方便

pig_util模块说明

对于pig_util模块可以去安装Pig的目录下获取。Hello World例子,大家应该都会感觉很亲切,所以先以Hello World程序开始说明。在这个Hello World例子中只是单纯的输出数据,并没有使用Pig传递的数据。

  • 编写python脚本,脚本名为hello_world.py。
from pig_util import outputSchema    
@outputSchema('word:chararray')     # 使用outputSchema装饰器
def hello_world():
return "hello world"
(2)进入Grunt中调用Hello World UDF。
(base) root@test_data# pig -x local
-- 1注册Python脚本,通过输出的的信息,判断成功的注册Python脚本
grunt> REGISTER /home/hadoop/test_data/hello_world.py using streaming_python as hello_udf ;  
-- 2加载数据
grunt> movies_data = load '/home/hadoop/test_data/movies.csv' using PigStorage(',') as (movieId:chararray, title:chararray, genres:chararray) ;
grunt> movies_10 = LIMIT movies_data 10 ;
-- 3调用Python的udf
grunt> movies_10_hello = FOREACH movies_10 GENERATE hello_udf.hello_world() ;
grunt> dump movies_10_hello ;     -- 输出10个hello world,如下所示
2019-09-26 20:10:45,505 [MainThread] INFO  org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths to process : 1
(hello world)
(hello world)
(hello world)

Pig调用Python UDF

在通过前一小节对pig_util.py使用实际并没有数据操作,只是演示了一个处理流程。这一节将进行演示,使用Python UDF操作Pig数据。在使用Python脚本时需要指定解释器,支持两种Jpython和C Ptyhon。

使用Jython:register '/path/to/pigudf.py' using jython as myfuncs;
使用C Python:register '/path/to/pigudf.py' using streaming_python as myfuncs;

对Movies数据进行操作。由于电影名中包含出品年份,像这样Toy Story (1995)。现在使用Python将影名和年份拆开,后计算至今出版了多少年。

from pig_util import outputSchema
from datetime import datetime
import re
@outputSchema('title:chararray')
def parse_title(title):
    ............

相关文章

网友评论

      本文标题:Python Pig UDF函数

      本文链接:https://www.haomeiwen.com/subject/vxzrxhtx.html