1. 程式人生 > >十八、Hive 中UDF程式設計

十八、Hive 中UDF程式設計



依據課程中講解的如何自定義UDF,進行案例編寫,進行總結步驟,並完成額外需求,具體說明如下:1) 依據課程講解UDF程式設計案例,完成練習,總結開發UDF步驟,程式碼貼圖,

給予註釋,重點在於清晰程式設計思路。2) 完成如下資料欄位中雙引號,自定義UDF,完成程式設計測試。

  1. 新建maven專案。
  2. 配置pom.xml

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<hive.version>0.13.1</hive.version>

<hadoop.version>2.5.0</hadoop.version>

</properties>

<dependencies>

<dependency>

<groupId>jdk.tools</groupId>

<artifactId>jdk.tools</artifactId>

<version>1.7</version>

<scope>system</scope>

<systemPath>${JAVA_HOME}/lib/tools.jar

</systemPath>

</dependency>

<!--hadoopClient -->

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-common</artifactId>

<version>${hadoop.version}</version>

</dependency>

<dependency>

<groupId>org.apache.hadoop

</groupId>

<artifactId>hadoop-hdfs</artifactId>

<version>${hadoop.version}</version>

</dependency>

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-client</artifactId>

<version>${hadoop.version}</version>

</dependency>

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-hdfs</artifactId>

<version>${hadoop.version}</version>

</dependency>

<!-- Hive Client -->

<dependency>

<groupId>org.apache.hive</groupId>

<artifactId>hive-jdbc</artifactId>

<version>${hive.version}</version>

</dependency>

<dependency>

<groupId>org.apache.hive</groupId>

<artifactId>hive-exec</artifactId>

<version>${hive.version}</version>

</dependency>

</dependencies>

  1. udf

importjava.util.regex.Matcher;

importjava.util.regex.Pattern;

importjava.util.regex.PatternSyntaxException;

importorg.apache.hadoop.hive.ql.exec.UDF;

importorg.apache.hadoop.io.Text;

//UDF是作用於單個數據行,產生一個數據行

//使用者必須要繼承UDF,且必須至少實現一個evalute方法,該方法並不在UDF

//但是Hive會檢查使用者的UDF是否擁有一個evalute方法

publicclassStrFilterextendsUDF  {

privateTextresult=newText();

publicText evaluate(Text str) {

try{

if(str.toString().indexOf("/")!=-1){

              String  str2   =StringFilter(str.toString());

result.set(str2.substring(str2.indexOf(" ",2),str2.indexOf(" ", 4)).trim());

returnresult;

        }

else{

result.set(StringFilter(str.toString())+":");

returnresult;}

        }catch(Exceptione) {

returnnull;

        }

    }

//過濾特殊字元

publicstatic   String StringFilter(String  str)  throws   PatternSyntaxException   {  

//String regEx="[`[email protected]#$%^&*()+=|{}':;',\\[\\].<>/?~!@¥%……&*()——+|{}【】#;:”“’。,、?]";

         StringregEx="[\"]";

         Pattern  p   =   Pattern.compile(regEx);  

         Matcher  m   =  p.matcher(str);  

returnm.replaceAll("").trim();  

  }  

}

  1. 建立表並匯入

CREATE TABLE logs(

host STRING,

identity STRING,

time STRING,

request STRING,

status STRING)

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

WITH SERDEPROPERTIES (

"input.regex" = "(\".*?\") (\".*?\") (\".*?\") (\".*?\") (\".*?\")",

"output.format.string" = "%1$s %2$s %3$s %4$s %5$s")

STORED AS TEXTFILE; 

匯入

load data local inpath '/home/access.log' into table logs;

select host,request  from logs limit 100;

add jar /home/strsfilter.jar; 

create temporary function strfilter as 'com.hyhc.hiveudf.StrFilter';

檢視結果

相關推薦

Hive UDF程式設計

 依據課程中講解的如何自定義UDF,進行案例編寫,進行總結步驟,並完成額外需求,具體說明如下:1) 依據課程講解UDF程式設計案例,完成練習,總結開發UDF步驟,程式碼貼圖, 給予註釋,重點在於

python的os模塊

包括 span 分割文件 sys () workspace tdi 隱藏 -- A.os模塊:系統相關的(相對比較常用的有:os.stat(‘path/filename‘),os.path.split(path),os.path.dirname(path),os.path.

shell腳本的邏輯判斷文件目錄屬性判斷if特殊用法case判斷

shell腳本中的邏輯判斷 文件目錄屬性判斷 if特殊用法 case判斷 六十八、shell腳本中的邏輯判斷、文件目錄屬性判斷、if特殊用法、case判斷一、shell腳本中的邏輯判斷 格式1:if 條件 ; then 語句; fi 格式2:if 條件; then 語句; else 語句; f

Django框架配置使用mysql

mysql命令的回顧: 注意:django框架不會自動生成mysql資料庫,所以需要手動去建立。 1、開啟wamp軟體,開始建立mysql資料庫: 2、進入虛擬環境建立django專案: 3、進入專案建立應用 4、註冊剛剛建立的應用:

Go基礎程式設計:複合型別—結構體

1 結構體型別 有時我們需要將不同型別的資料組合成一個有機的整體,如:一個學生有學號/姓名/性別/年齡/地址等屬性。顯然單獨定義以上變數比較繁瑣,資料不便於管理。 結構體是一種聚合的資料型別,它是由一系列具有相同型別或不同型別的資料構成的資料集合。每個資料稱為結構體的

chrome在爬蟲的使用

1、新建隱身視窗   瀏覽器中直接開啟網站,會自動帶上之前網站時儲存的cookie,但是在爬蟲中首次獲取頁面是沒有攜帶cookie的,這種情況如何解決呢? 解決方法: 使用隱身視窗,首次開啟網站,不會帶上cookie,能夠觀察頁面的獲取情況,包括對方伺服器如何設定cookie

併發程式設計之執行緒之間的通訊之waitnotify

一、執行緒的幾種狀態 執行緒有四種狀態: 1.產生(New):執行緒物件已經產生,但尚未被啟動,所以無法執行。如通過new產生了一個執行緒物件後沒對它呼叫start()函式之前。 2.可執行(Runnable):每個支援多執行緒的系統都有一個排程器,排程器會從執行緒池中

併發程式設計之併發工具類CyclicBarrier詳解

一、概述 CyclicBarrier是一個同步工具類,它允許一組執行緒互相等待,直到到達某個公共屏障點。與CountDownLatch不同的是該barrier在釋放等待執行緒後可以重用,所以稱它為迴圈(Cyclic)的屏障(Barrier)。 CyclicBarrier支援一個可選的Ru

一天一篇mysql之:mysql的limitbetween andin

limit關鍵字 Limit子句可以被用於強制 SELECT 語句返回指定的記錄數。Limit接受一個或兩個數字引數。引數必須是一個整數常量。如果給定兩個引數,第一個引數指定第一個返回記錄行的偏移量,第二個引數指定返回記錄行的最大數目。   //初始記錄行的偏移量是 0(

hiveUDFUDAF和UDTF使用

Hive進行UDF開發十分簡單,此處所說UDF為Temporary的function,所以需要hive版本在0.4.0以上才可以。一、背景:Hive是基於Hadoop中的MapReduce,提供HQL查詢的資料倉庫。Hive是一個很開放的系統,很多內容都支援使用者定製,包

angularjs filter在controller的使用--避免多次遍歷

遍歷 lar .com 簡潔 避免 angular -1 con nbsp filter在html頁面的使用司空見慣,比如: filter在controller中使用可以避免多次使用angular.foreach,來進行遍歷。例如: 如果使用filter,則會讓代碼簡潔

DOM元素尺寸和位置

包含 隱藏 有單位 absolut bottom var compute 重要 內邊距 十八、DOM元素尺寸和位置 1.獲取元素CSS大小 1.通過style內聯獲取元素的大小   var box = document.getElementById(‘box‘);

JSON

mas 數據結構 afa def 簡單 安全 ie8 布爾 解決 二十八、JSON 前兩章我們探討了XML的結構化數據,但開發人員還是覺得這種微型的數據結構還是過於煩瑣、冗長。為了解決這個問題,JSON的結構化數據出現了。JSON是JavaScript的一個嚴格的子集,利用

vim進入編輯模式vim命令模式vim實踐

vim編輯模式 vim命令模式 十八、vim進入編輯模式、vim命令模式、vim實踐一、vim進入編輯模式編輯模式:一般模式下不可以修改某個字符,若要修改字符,只能進入編輯模式。從一般模式進編輯模式,只需按i、I、a、A、o、O、r和R中某個鍵即可。當進入編輯模式時,在屏幕尾部會顯示INSERT或RE

awk

awk二十八、awkawk:流式編輯器,針對文檔的行進行操作。awk兼具sed的所有功能,且更強大。可以對每段做匹配,不能更改文件內容,不像sed有-i選項能更改內容。截取文檔中的某段,示例:-F:指定分隔符,若不加-F,則以空格或tab為分隔符。print為打印的動作,用來打印某個字段。$1為第一個字段,以

MariaDB安裝Apache安裝

MariaDB安裝 Apache安裝 一、MariaDB安裝安裝方法和安裝MySQL基本一致# cd /usr/local/src# wget https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.2.14/bintar-linux-glib

Hive學習之路 (Hive的Shell操作

int one 依次 也會 not show div ble ive 遞增 一、Hive的命令行 1、Hive支持的一些命令 Command Description quit Use quit or exit to leave the interactive sh

Linux 進程與信號---進程介紹

控制 HR struct bsp 進程控制 start 否則 文件寫入 內核 18.1 進程的概念 程序:程序(program)是存放再磁盤文件中的可執行文件 進程 程序的執行實例被稱為進程(process) 一個程序的執行實例可能由多個 進程具有獨立的權限和職責。如果

【Android Studio安裝部署系列】Android studio更換APP應用圖標

tail map 安全區 大小 next detail 有時 ash blog 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 概述 Android Studio新建項目後會有一個默認圖標,那麽如何更換圖標呢? 替換圖標 這個方案不建議直接在已有項目上更換

CSS3的動畫功能

另一個 RM over transform ont 2.3 city 定義 指定 CSS3中的動畫功能分為Transitions功能和Animations功能,這兩種功能都可以通過改變CSS中的屬性值來產生動畫效果,下面我們就來介紹下這兩種功能。 1、Transitions