关于在hive中使用python做UDF的总结
主要是利用hive提供的transform语句。
1.编写python脚本,python脚本数据如下(参考:https://dwgeek.com/hive-udf-using-python-use-python-script-into-hive-example.html/):
#!/usr/bin/python import sys try: for line in sys.stdin: line = line.strip('\n\r') fname , lname = line.split('\t') firstname = fname.title() lastname = lname.title() print '\t'.join([firstname, lastname]) except: print sys.exc_info()
2. 配置python脚本,以让hive能够识别到,经测试有两种方式:
第一种:在hive CLI中增加python脚本,脚本可以放到服务器本地目录或者hdfs中,依据py脚本所处的位置使用不同的add file语句。
--在服务器本地目录时 add file initCap.py --在hdfs时 add file hdfs:///tmp/initCap.py
由于我们的hive配置了sentry权限控制,经测试只有hive CLI能够执行add file,用beeline或者其它客户端的时候会报没有权限的问题,具体原因还不知道。这种方式需要在每次连接hive都要执行add file的命令,不实用。
第二种:使用hive.reloadable.aux.jars.path 的配置参数,然后把py脚本放到对应的目录中,然后在hive中执行reload 命令,这种方式不需要每次连接都做配置。假设我们配置为:
hive.reloadable.aux.jars.path=/jars/hive/udf/
3. 在hive sql中使用刚才我们添加的python脚本,示例sql如下:
--在hive CLI中使用add file的情况
select transform('abc\tdef') using 'python initCap.py' as (col_name,khjd);
--使用hive.reloadable.aux.jars.path配置参数的情况
select transform('abc\tdef') using '/jars/hive/udf/initCap.py' as (col_name,khjd);
经测试,当使用mr作为执行引擎的时候以上方式可以正确调用py。但是使用spark作为执行引擎的时候会报错,原因暂时未知。
以上。
啦啦啦!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2017-04-09 关于c语言中的program_invocation_short_name