zoukankan      html  css  js  c++  java
  • 关于在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('
    
    ')
            fname , lname = line.split('	')
            firstname = fname.title()
            lastname = lname.title()
            print '	'.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 def') using 'python initCap.py' as (col_name,khjd);


    --使用hive.reloadable.aux.jars.path配置参数的情况
    select transform('abc def') using '/jars/hive/udf/initCap.py' as (col_name,khjd);

    经测试,当使用mr作为执行引擎的时候以上方式可以正确调用py。但是使用spark作为执行引擎的时候会报错,原因暂时未知。

    以上。

  • 相关阅读:
    leetcode_24. 两两交换链表中的节点
    Mysql大数据量分页优化
    MySQL 默认排序是什么
    spring注入map,spring注入一个接口的多个实现类在map里
    eureka缓存细节以及生产环境的最佳配置
    MySQL 5.7性能调优
    安装后的十个MySQL性能调整设置(版本:5.1、5.5 和5.6)
    docker部署tomcat应用和MySQL数据库
    MySQL热备工具Xtrabackup
    MySQL数据库的冷备方式
  • 原文地址:https://www.cnblogs.com/vanwoos/p/12667515.html
Copyright © 2011-2022 走看看