UDF练习

原始数据8条:
"1"    "A"    "R"    32    "H"    "w"    "2017-01-16"    1167    80    0    0    0    1200    0
"2"    "A"    "E"    67    "L"    "b"    "2016-06-12"    2488    50    1    1    3    4000    1
"3"    "A"    "E"    32    "H"    "w"    "2016-07-13"    2122    98    0    0    1    1500    1
"4"    "A"    "E"    82    "H"    "w"    "2016-01-20"    2993    115    0    0    0    3200    1
"5"    "A"    "s"    22    "R"    "b"    "2016-08-31"    484    69    0    1    3    800    0
"6"    "b"    "H"    92    "H"    "w"    "2016-02-04"    1634    81    0    0    1    3400    1
"7"    "A"    "E"    76    "H"    "w"    "2016-06-14"    1127    92    0    0    0    6000    1
"8"    "A"    "R"    82    "r"    "w"    "2016-05-30"    196    146    1    3    4    2300    0

处理后的结果数据:
2 ['A','E'] 67 ['L','B'] 2016-06-12 2488 50 {1,1,3} 4000 1
3 ['A','E'] 32 ['H','W'] 2016-07-13 2122 98 {0,0,1} 1500 1
4 ['A','E'] 82 ['H','W'] 2016-01-20 2993 115 {0,0,0} 3200 1
5 ['A','S'] 22 ['R','B'] 2016-08-31 484 69 {0,1,3} 800 0
6 ['B','H'] 92 ['H','W'] 2016-02-04 1634 81 {0,0,1} 3400 1
7 ['A','E'] 76 ['H','W'] 2016-06-14 1127 92 {0,0,0} 6000 1
8 ['A','R'] 82 ['R','W'] 2016-05-30 196 146 {1,3,4} 2300 0


原数据说明:
原数据总共8行14列,列与列之间的分隔符是\t键。
第1和7列的双引号去掉,且第7列的时间大于2017-01-01时,整行数据将被过滤掉。
第2、3、5、6列的双引号变成单引号,小写变大写,第2、3列组成字符数组,第5、6列组成字符数组。
第10、11、12列用"{}"括起来。
组成后的每一列之间用" "分割。

项目要求:
1.将Hive外部表加载原始数据到Hive表(用location 指定数据所在目录)
2.使用UDF函数对原始表数据做过滤,过滤结果如上结果数据。
3.将结果数据添加到新的hive表保存!

注意:
(1):制作Word文档,要求记录操作流程,结果截图,保存结果数据及UDF函数类。
(2):Word文档以"1809"班月考机试——+你的名字”命名。

特别强调:
1).以自己的名字命名文件夹、以自己的名字命名文件夹、以自己的名字命名文件夹。
2).如果使用UDF函数,只要对应的类及相关的类,不要Java工程、不要Java工程、不要Java工程。


过程:

1建表

 

2编辑原数据

vi /root/mytest.txt,内容如下

 

3导入数据

 

4写一个类

package hadooptest;
import org.apache.hadoop.hive.ql.exec.UDF;
public class MyTest extends UDF
{
    public String evaluate(String str)
    {
        String[] strs = str.split("\t");
        String str3 = "";
        String newLine="";
        for (int i = 0; i <= strs.length-1; i++) {
            if(i == 0) {
                newLine=newLine+strs[0].charAt(1)+" ";
            }else if(i == 1||i==4) {
                newLine=newLine+"['"+(""+strs[i].charAt(1)).toUpperCase()+"','";
            }else if(i == 2|| i==5){
                newLine=newLine+(""+strs[i].charAt(1)).toUpperCase()+"'] ";
            }else if(i == 6) {
                strs[6]=strs[6].substring(1,11);
                String[] ss=strs[6].split("-");
                if(Integer.parseInt(ss[0])>=2017)
                {
                    return "";
                }
                newLine=newLine+strs[6]+" ";
            }
            if(i == 9)
            {
                newLine=newLine+"{"+strs[9]+",";
            }
            else if(i == 10)
            {
                newLine=newLine+strs[10]+",";
            }
            else if(i == 11)
            {
                newLine=newLine+strs[11]+"} ";
            }else if(i == 3 || i == 7 || i == 8 || i == 12 )
            {
                newLine=newLine+strs[i]+" ";
            }
            else if(i==13)
                newLine=newLine+strs[i];
        }
        return newLine;
    }
}

 

5打包,得到

 

改名为

 

将这个jar包移动到linux de  /root目录下

 

6在hive中添加这个jar包

 

7在hive中创建函数

 

8使用方法

 

9查看结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值