• HIVE中替换UDF神器-- TRANSFORM()函数


    TRANSFORM()

    在平时的hive开发中,虽然hive提供了一些比较丰富的内置函数,但是也不能完全的满足生产中的需要,对于一些逻辑,需要自定义UDF实现,但是又不想写UDF,还需要实现,就可以用TRANSFORM()方法

    TRANSFORM()方法可以看作是从一个表中读取了一些字段,但是其中的一些字段需要做一些处理,那么就可以使用TRANSFORM函数,通过调用我们写好的处理脚本,处理这段逻辑,比如python脚本等等。

    以HIVE官网中的一个例子为例讲解一下TRANSFORM函数的使用

    比如需要对一个时间戳转换为是周几,就是输入一个时间戳,返回这个时间戳是周几。

    TRANSFORM语法

    select
      transform(column1, column2,...)
      using 'python xxx.py'
      as (column1, column2,...)
    from
      tbl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    简而言之,就是从一个表中读取字段,用python脚本处理,然后输出新的字段。
    那么python脚本怎么使用呢?
    python中通过sys.stdin来获取输入的字段,然后通过循环处理每一行数据即可

    for line in sys.stdin:
        xxx #处理逻辑
        print '\t'.join(column1, column2, ...)
    
    • 1
    • 2
    • 3

    处理起来很简单,借助python得天独厚的优点,可以很方便的处理复杂逻辑
    根据HIVE官方提供的案例,看一下
    传入字段,调用python脚本,处理,输出结果到hive表中

    python脚本编写

    将输入的参数由时间戳变为是周几输出

    import sys
    import datetime
    
    for line in sys.stdin:
      line = line.strip()
      # 切割传入的参数
      userid, movieid, rating, unixtime = line.split('\t')
      # 处理时间戳变为周几
      weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
      # 拼接结果输出
      print '\t'.join([userid, movieid, rating, str(weekday)])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    调用脚本

    INSERT OVERWRITE TABLE u_data_new
    SELECT
      -- 从u_data里面拿到的数据
      TRANSFORM (userid, movieid, rating, unixtime)
      -- 调用脚本处理传入参数
      USING 'python weekday_mapper.py'
      -- 输出到u_data_new的参数,将unixtime转变为了weekday
      AS (userid, movieid, rating, weekday)
    FROM u_data;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意:python脚本需要传入到集群内,调用时写上python脚本的路径,可以是集群的路径,也可以是hdfs的路径

  • 相关阅读:
    帝国cms漏洞分析前台XSS漏洞
    消息中间件-kafka实战-第四章-kafkaUI
    基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统
    【createWrapper】根据条件类创建查询wrapper
    中国生态系统服务空间/食物生产、土壤保持、水源涵养、防风固沙、生物多样性、碳固定
    国际化:i18n
    Tmux 简单使用
    快速排序(递归和非递归两种方法实现)
    QProgressDialog自动弹出的问题
    【汇编语言王爽】学习笔记p54-p79
  • 原文地址:https://blog.csdn.net/weixin_46429290/article/details/125530835