hive中如何调用python函数

Python015

hive中如何调用python函数,第1张

ADD FILE /home/taobao/dw_hive/hivelets/smoking/ext/tsa/hivesql/bjx_topic_t1/splitsysin.py.bak

create table if not exists splittest_t1

(

topic_id string,

topic_title string,

topic_desc string,

biz_date string,

gmt_create string

) PARTITIONED BY(pt string)

row format delimited fields terminated by '\001'

lines terminated by '\n'

STORED AS textfile

select TRANSFORM(topic_id,topic_title,topic_desc,biz_date,gmt_create)

USING 'splitsysin.py'

as topic_id,topic_title,topic_desc,biz_date,gmt_create

from r_bjx_dim_topic_t1

你把print写在try里面当然会少数据。你应该try访问fields数组并更新fields[2]的值。另一方面,从功能点上来说,使用SQL函数nvl或coalesce就能实现,没必要写个UDF来实现,你这样做增加额外的IO消耗和工作量。如果一定要写UDF,建议少用print,改用标准输出实现:sys.stdout.write()。

之所以选择基于Linux系统用Python连接hive,是因为在window下会出现Hadoop认证失败的问题。会出现执行python脚本的机器无目标hive的kerberos认证信息类似错误,也会出现sasl调用问题:

该错误我尝试多次,未能解决(有知道window下解决方案的欢迎留言),所以建议使用Linux系统。

VMware Workstation +Ubuntu

网上教程很多,本文推荐一个教程: https://blog.csdn.net/stpeace/article/details/78598333

主要是以下四个包:

在安装包sasl的过程会出现麻烦,主要是Ubuntu中缺乏sasl.h的问题,这里可以通过下面语句解决

这和centos有一些区别。

本文是基于本机虚拟机用Python连接的公司测试环境的hive(生产环境和测试环境是有隔离的,生产环境需要堡垒机才能连接)

因缺乏工程和计算机基础的知识,对很多的地方都了解的不够深入,欢迎大神指点,最后向以下两位大佬的帖子致谢:

[1] https://www.zhihu.com/question/269333988/answer/581126392

[2] https://mp.weixin.qq.com/s/cdFxkphMtJASQ7-nKt13mg