首页 > 其他分享 >hive大数据测试(时间数据清洗UDF打包到hive中调用自定义函数,hive表数据导出到本机)

hive大数据测试(时间数据清洗UDF打包到hive中调用自定义函数,hive表数据导出到本机)

时间:2023-10-13 20:46:44浏览次数:36  
标签:自定义 Text hive UDF org apache import 本机

1.数据清洗

pom依赖:

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <hadoop.version>3.3.0</hadoop.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.5.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>0.13.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>0.13.1</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

 

1.1编写UDF

package hiveUDF;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateTransform extends UDF {

    private final SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss", Locale.ENGLISH);
    private final SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public Text evaluate(Text input){
        //过滤

        if(input == null){
            return null;
        }

        Text output = new Text();
        String inputDate = input.toString();

        try{

            Date parseDate = inputFormat.parse(inputDate);

            String outputDate = outputFormat.format(parseDate);

            output.set(outputDate);

        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }

        return output;
    }


}

 

1.2在test中(相同包结构)测试是否成功清洗数据

package hiveUDF;

import org.apache.hadoop.io.Text;

public class DateTransformTest {
    public static void main(String[] args) {
        System.out.println(new DateTransform().evaluate(new Text("10/Nov/2016:00:01:02 +0800")));
    }
}

测试结果是目的结果

1.3打包成jar包

方法一:直接在这里输出mvn clean package

方法二:点clean 然后package

 1.4 上传到hive中

jar先上传到虚拟机中,接着在hive中输入:(node3)

add jar jar包的位置

然后输入

create temporary function 函数名字自起 as '方法所在的位置'

例如:

create temporary function datetransform as 'hiveUDF.DateTransform' 

 然后再在hive里面调用测试一下

datetransform("10/Nov/2016:00:01:02 +0800")

如果输出2016-11-10 00:01:02说明调用成功了

1.5执行清洗并且将清洗后的输入存入data_chage表中

create table data_chage
as
    select
           ip,
           datetransform(d_time) as d_time,
           day,traffic,type,id
from data;

 

2.将hive中的数据表数据导出到本机

2.1导出到Linux虚拟机本机

insert overwrite local directory '目录路径' select * from 表

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','  以','作为分隔

例如:将数据库classtest04下的表top_traffic导出到 /export/data/hiveoutdata/classtest04,且用","进行分隔的语句

insert overwrite local directory '/export/data/hiveoutdata/classtest04' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from classtest04.top_traffic;

2.2导出到本地

从虚拟机上直接下载该数据表即可,然后就可以用可视化SQL打开

同步虚拟机的sql后只需要在可视化SQL中导入该数据表,虚拟机中的sql中也会导入该数据表

3.资料:

Hive中UDF编程 - 简书 (jianshu.com)

Hive中UDF练习 - 简书 (jianshu.com)

Hive日志分析之数据清洗 - 简书 (jianshu.com)

标签:自定义,Text,hive,UDF,org,apache,import,本机
From: https://www.cnblogs.com/hmy22466/p/17763011.html

相关文章

  • iOS 17.1 Beta 3上线:iPhone 15 Pro自定义操作按钮误触问题修复了
    在iPhone15Pro和iPhone15ProMax上,苹果将静音拨片重新设计为自定义操作按钮,支持一键启用各种操作。在系统中选定你要用的快捷功能后,按住此操作按钮即可启动相应的操作,比如静音模式、专注模式、相机、手电筒、语音备忘录、翻译、放大器、快捷指令以及辅助功能等等。尽管操作......
  • hashcat charsets文件夹下 .hcchr自定义字符集
    说明通常我们使用的是英文字符,abc123这些,但是如果遇到俄文、阿拉伯等一些非ASCII码的字符集,每次手动输入不现实。所以就可以保存到.hcchr文件中一、先看看,hashcat提供內建字符集?l=abcdefghijklmnopqrstuvwxyz?u=ABCDEFGHIJKLMNOPQRSTUVWXYZ?d=0123456789?s=......
  • 使用api调用chatGPT,python自定义接口方法
    用非官网的api一般要把官网地址https://api.openai.com/改为相应网站的url。今天测试的时候找了各种教程都没什么用,最后终于成功了,代码如下:importopenaiimportjsonimportosopenai.api_key="sk-xxxxxxxxxx"#改成你的keyopenai.api_base="https://yyyyyyyyyy/v1"#改成......
  • 直播平台搭建,自定义View实现loading动画加载
    直播平台搭建,自定义View实现loading动画加载先自定义一个View,继承自LinearLayout,在Layout中,添加布局控件 /** *Createdbyxiedongon2017/3/7. */ publicclassLoading_viewextendsLinearLayout{  privateContextmContext;  privateRelativeLayoutloadi......
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty:一站式告警响应平台,前往此地址免费体验!自定义字段FlashDuty已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了Lables进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了自定义字段功能,......
  • 无涯教程-DBUtils - 自定义行处理器
    如果数据库表中的列名和Javabean对象名不一样,那么无涯教程可以使用自定义的BasicRowProcessor对象来映射它们。请参见下面的示例。以下是Employee.java的内容。publicclassEmployee{privateintid;privateintage;privateStringfirst;privateString......
  • Hive-服务启动和停止命令
    1、启动命令#!/bin/bashnohuphive--servicemetastore>>$HIVE_HOME/logs/metasotre.log2>&1&nohuphive--servicehiveserver2>>$HIVE_HOME/logs/hiveserver.log2>&1&2、停止命令#!/bin/bashprocess="hive"PID=$(p......
  • Linux系统下配置Nginx使部分URL使用多套自定义的PHP-FPM配置
    Nginx修改演示:vim/usr/local/nginx/conf/vhost/example.comserver{ listen80; server_name192.168.1.180; location/{ root/Code/project/public; indexindex.phpindex.html; include/usr/local/nginx/conf/rewrite/laravel.conf;location~\.......
  • 虚拟机如何打开hive数据库
    1、启动hodoop2.、启动hive的服务:metastorecd/export/server/apache-hive-3.1.2-bin/bin./hive--servicemetastore后台启动nohup./hive--servicemetastore&3、启动hive的服务:hiveserver2服务./hive--servicehiveserver2nohup./hive--servicehivese......
  • hive数据清洗,导入mysql
    --用于清洗的表createtabledata1(`ip`stringcomment'城市',`date1`stringcomment'日期',`day`stringcomment'天数',`traffic`doublecomment'流量',`type`stringcomment'类型:视频video或文章art......