广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Hive UDF Python
  • 942
分享到

Hive UDF Python

HiveUDFPython 2023-01-31 02:01:32 942人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

简介 Hive为我们提供了众多的内置函数,但是在实际的运用过程中仍然不能满足我们所有的需求.hive是用java开发的,本身提供了使用java去开发UDF的方式.而这里我们采用python的方式去实现UDF函数. DEMO实现 我

简介

Hive为我们提供了众多的内置函数,但是在实际的运用过程中仍然不能满足我们所有的需求.hive是用java开发的,本身提供了使用java去开发UDF的方式.而这里我们采用python的方式去实现UDF函数.

DEMO实现

我们这里用Python自定义函数,去实现一个方法,利用身份证号去判断性别(18位身份证的倒数第二位偶数为女,奇数为男.15位身份证的倒数第一位偶数为女,奇数为男.).其实这个需求可以使用hive自带的function去进行解决.我们接下来使用2种方式去实现这个需求.

数据准备

我们在hive上创建一个external表(名字person表),执行如下代码:

create external table person(
name string,
idcard string)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t'
STORED as TEXTFILE;

该表两个字段,一个为name,另一个为idcard
数据格式如下:

neil    411326199402110030
pony    41132519950911004x
jcak    12312423454556561
tony    412345671234908

field分隔符使用\t
我们将数据放入hive的warehouse中:

hdfs dfs -put person.txt /user/hive/warehouse/test_neil.db/person

执行select,我们发现数据已经进入到hive了.

使用Hive Function去实现

我们可以执行一下的hql去实现

select idcard,
case when length(idcard) = 18 then
             case when substring(idcard,-2,1) % 2 = 1 then '男' 
             when substring(idcard,-2,1) % 2 = 0 then '女' 
             else 'unknown' end 
     when length(idcard) = 15 then 
            case when substring(idcard,-1,1) % 2 = 1 then '男'
            when substring(idcard,-1,1) % 2 = 0 then '女'
            else 'unknown' end
     else '不合法' end 
from person;

得到的结果如下(beeline下):

+---------------------+------+--+
|       idcard        | _c1  |
+---------------------+------+--+
| 12312423454556561   | 不合法  |
| 123124234545565     | 男    |
| 411325199308110030  | 男    |
| 41132519950911004x  | 女    |

UDF编写

如下是我们的udf代码:

# -*- coding: utf-8 -*-
import sys

for line in sys.stdin:
    detail = line.strip().split("\t")
    if len(detail) != 2:
        continue
    else:
        name = detail[0]
        idcard = detail[1]
        if len(idcard) == 15:
            if int(idcard[-1]) % 2 == 0:
                print("\t".join([name,idcard,"女"]))
            else:
                print("\t".join([name,idcard,"男"]))
        elif len(idcard) == 18:
            if int(idcard[-2]) % 2 == 0:
                print("\t".join([name,idcard,"女"]))
            else:
                print("\t".join([name,idcard,"男"]))
        else:
            print("\t".join([name,idcard,"身份信息不合法!"]))

这里我们使用python的重定向,将hive控制台的输出进行split,split默认使用的为\t.然后根据split后的idcard的倒数第二位进行判断这个人的性别.

 测试

我们在hive中去执行查询时,报错的提示不是很详细.我们可以使用cat指令去测试python脚本的执行效果.
我们在终端中执行如下指令:

cat person.txt|python person.py

输入结果如下:

neil    411325199308110030  男
pony    41132519950911004x  女
jack    12312423454556561   身份信息不合法!
tony    123124234545565 男

说明我们的解析是成功的.

使用

我们在hive中使用python定义的UDF函数要借助transform函数去执行.
transform函数的语法如下:

SELECT TRANSFORM (<columns>)
USING 'python <python_script>'
AS (<columns>)
FROM <table>;

transfrom和as的columns的个数不必一致.
我们首先需要将我们的person.py加载入

我们在hive中去执行如下代码:

add file /xxx/person.py

xxx为本地文件的路径.
然后使用transform函数执行:

select transform(name,idcard) USING 'python person.py'  AS (name,idcard,gender) from person;

我们同样可以得到如下的结果:

neil    411325199308110030  男
pony    41132519950911004x  女
jack    12312423454556561   身份信息不合法!
tony    123124234545565 男

--结束END--

本文标题: Hive UDF Python

本文链接: https://www.lsjlt.com/news/185373.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hive UDF Python
    简介 Hive为我们提供了众多的内置函数,但是在实际的运用过程中仍然不能满足我们所有的需求.hive是用java开发的,本身提供了使用java去开发UDF的方式.而这里我们采用python的方式去实现UDF函数. DEMO实现 我...
    99+
    2023-01-31
    Hive UDF Python
  • Hive中怎么利用UDF实现文本分词
    Hive中怎么利用UDF实现文本分词,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。UDF 简介Hive作为一个sql查询引擎,自带了一些基本的...
    99+
    2022-10-18
  • Hive中如何配置与编写自定义UDF函数
    小编给大家分享一下Hive中如何配置与编写自定义UDF函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境介绍:CentOS7+hive-1.1.0-cdh6....
    99+
    2023-06-03
  • python连接hive
      一、需要安装下载的包 下载pyhive、thrift和sasl三个包(pip install就好) 目前遇到的问题:         sasl安装问题: (1)sasl安装需要到相关网站下载whl之后找到和python适配的版本进行安装...
    99+
    2023-09-29
    hive hadoop 数据仓库
  • python 连接 hive
    由于版本的不同,Python 连接 hive 的方式也就不一样。 在网上搜索关键字 python hive 的时候可以找到一些解决方案。大部分是这样的,首先把hive 根目录下的$HIVE_HOME/lib/py拷贝到 pytho...
    99+
    2023-01-31
    python hive
  • Python执行hive sql
    该python脚本是用于执行hive脚本的,需要设置hive的可执行环境变量,其实质转化为shell下命令 hive -e 'sql语句’ 的方式执行,然后把结果重定向到控制台显示。注:由于该脚本是直接调用shell中的hive...
    99+
    2023-01-31
    Python hive sql
  • Mysql UDF提权复现Raven2
    Raven2通关过程 主要通过Raven2靶机进行复现Mysql UDF提权,以下为通关过程。 靶机镜像:https://www.vulnhub.com/entry/raven-2,269/ 信息收集...
    99+
    2023-09-22
    mysql php 数据库 web安全 后端
  • MySQL中怎么编写UDF
    MySQL中怎么编写UDF,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 1.什么是UDF UDF顾名思义,就是User defined ...
    99+
    2022-10-18
  • 怎么编写UDF函数
    本篇内容主要讲解“怎么编写UDF函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么编写UDF函数”吧!1.为什么需要UDF?1)、因为内部函数没法满足需求。2)、hive它本身就是一个灵活框...
    99+
    2023-06-02
  • MySQL UDF 在 in ( subquery where ) bug
    SELECT 45, COUNT(0)  FROM ac_dealer_sales ds  WHERE ds.user_...
    99+
    2022-10-18
  • Window环境下MySQL UDF提权
    目录前言一、UDF简介二、UDF提权条件三、上传动态链接库文件四、UDF提权步骤1、查看secure_file_priv的值2、查看plugin的值3、查看系统构架以及plugin目录MSF漏洞验证五、UDF提权反弹Sh...
    99+
    2023-03-21
    MySQL UDF提权 数据库提权
  • MySQL UDF的调试方式 - debugview (转)
    MySQL UDF的调试方式 - debugview (转)[@more@]Mysql UDF的调试方式 MYSQL的UDF实质就是一个不需要设置入口点的动态连接库(*Nix称之为共享库)。对于DLL的调试...
    99+
    2022-10-18
  • bin/hive进入hive报错
    [root@node01 apache-hive-2.1.1-bin]# bin/hiveSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found bindin...
    99+
    2019-10-14
    bin/hive进入hive报错
  • SparkSQL的自定义函数UDF使用
    目录Spark_SQL的UDF使用UDF简单使用Spark_SQL的UDF使用 用户自定义函数,也叫UDF,可以让我们使用Python/Java/Scala注册自定义函数,并在SQL...
    99+
    2023-02-01
    Spark SQL UDF Spark自定义函数UDF
  • python实现hive自动化测试
    本程序主要实现hive权限测试。系统中有管理员用户single和测试用户test。在路径/home/test/下,将用例和预期结果写在xml文件中。        执 行过程:kinit single用户,beeline -u -e登录并执...
    99+
    2023-01-31
    测试 python hive
  • Hive-谈谈你对Hive的认识
    结合其他同学和自己的笔记总结如下   什么是hive 基于Hadoop的开源的数据仓库工具,用于处理海量结构化数据。 Hive把HDFS中结构化的数据映射成表。 Hive通过把HiveSQL进行解析和转换,最终生成一系列在had...
    99+
    2018-03-06
    Hive-谈谈你对Hive的认识
  • HIVE架构
    UI:      用于提交查询的客户端,hive自带有CLI(command line),现在推荐使用beeline DRIVER:                1.用于接收客户端提交的SQL,并实现了session控制   ...
    99+
    2016-06-18
    HIVE架构
  • Hive简介
    1.1  Hive简介 1.1.1 什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 1.1.2 为什么使用Hive 直接使用hadoop所面临的问...
    99+
    2019-06-16
    Hive简介
  • [Hive]一篇带你读懂Hive是什么
    ✅作者简介:大家好,我是Philosophy7?让我们一起共同进步吧!🏆 📃个人主页:Philosophy7的csdn博客 🔥系列专栏: ...
    99+
    2023-10-23
    hive hadoop big data
  • shell命令执行hive脚本(hive交互)
    目录Hive执行方式方式1方式二方式三Hive执行方式 Hive的hql命令执行方式有三种: 1、CLI 方式直接执行2、作为字符串通过shell调用hive –e执行(-S开启静默,去掉”OK&...
    99+
    2022-06-05
    shell命令执行hive shell执行hive
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作