1. 程式人生 > >hive中新增永久性函式

hive中新增永久性函式

轉自http://li.angshan.blog.163.com/blog/static/13133228920123123572628/
2011-12-11 11:53

hive預設的函式並不是太完整,以後我們使用的使用肯定需要自己補充一些。
下面這個例子是個簡單的測試,關於自定義函式的。

函式程式碼
package com.example.hive.udf;

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

public final class Lower extends UDF {
  public Text evaluate(final Text s) {
    if (s == null) { return null; }
    return new Text(s.toString().toLowerCase());
  }
}

打包
javac -d Lower Lower.java
jar -cvf Lower.jar -C Lower/ .

在hive中新增包
hive> add jar /home/hjl/sunwg/Lower.jar;
Added /home/hjl/sunwg/Lower.jar to class path

在hive中建立函式
hive> create temporary function my_lower as ‘com.example.hive.udf.Lower’;
OK
Time taken: 0.407 seconds

使用函式
hive> select my_lower(name) from test10;

上面介紹了HIVE中的自定義函式,有一些函式是比較基礎的,公用的,每次都要create temporary function不免太麻煩了。
這樣的基礎函式需要直接整合到hive中去,避免每次都要建立。

1,新增函式檔案$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSunwg.java
package org.apache.hadoop.hive.ql.udf;

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

public final class UDFSunwg extends UDF {
  public Text evaluate(final Text s) {
    if (s == null) { return null; }
    return new Text(s.toString().concat(“sunwg”).toLowerCase());
  }
}

2,將函式sunwg註冊到hive的函式列表中
修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java檔案
import org.apache.hadoop.hive.ql.udf.UDFSunwg;

registerUDF(“sunwg”, UDFSunwg.class,false);

3,測試函式sunwg
hive> select sunwg(“abc”) from sunwg00 limit 1;   
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there’s no reduce operator
Starting Job = job_201104091858_381437, Tracking URL = http://hdpjt:50030/jobdetails.jsp?jobid=job_201104091858_381437
Kill Command = /home/dwapp/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=hdpjt:9001 -kill job_201104091858_381437
2011-04-21 16:01:28,733 Stage-1 map = 0%,  reduce = 0%
2011-04-21 16:01:34,123 Stage-1 map = 50%,  reduce = 0%
2011-04-21 16:01:35,543 Stage-1 map = 100%,  reduce = 0%
Ended Job = job_201104091858_381437
OK
abcsunwg
Time taken: 48.53 seconds

總結:在hive中新增函式是如此的簡單,建議將公共的基礎函式新增到hive中,而一些個性化的函式還是建立臨時函式。

相關推薦

hive新增永久性函式

轉自http://li.angshan.blog.163.com/blog/static/13133228920123123572628/ 2011-12-11 11:53 hive預設的函式並不是太完整,以後我們使用的使用肯定需要自己補充一些。 下面這個例子是個簡

IDEA建立Hive的UDF函式,白話文講解

1.UDF函式建立步驟 1.要編寫一個java類繼承UDF這個類。 2.重寫evaluate()方法。 3.使用maven打包。 1.打包步驟 2.點選install 在點選clean 再點選package完成打包。 4、將jar包上傳並新增到hive hive (default)

hive的字串函式

原始資料 hive> select * from Tri100; 1 rahul Hyderabad 30000 40000 2 Mohit Banglore 22000 25000 3

hive自定義函式及自定義json字串解析函式

hive中如何定義自己的函式 寫一個Java 程式,實現想要的函式功能 1.匯入hive安裝目錄的lib目錄的包 2新建一個類繼承 UDF類 3.過載父類中evaluate方法; 4.寫下自己的邏輯 package test; import

用spark實現hive的collect_set函式的功能

import org.apache.spark.SparkContext._ import org.apache.spark._ /** * Created by xiaojun on 2015/3/9. */ object SparkDemo2 { def ma

hive的高階函式-視窗函式

視窗函式的使用,配合聚合函式使用,能夠更加靈活的規約表的格式,大大減少工作量 說在前面 視窗函式,執行順序是最後執行僅僅是在order by之前執行。 over函式子句的使用 準備的測試資料 jackma,2018-01-01,10 tonym

Visual Studio 2010 與 VC++ 6.0 的操作差異(一)之對話方塊新增OnInitDialog()函式

Visual Studio 2010 與 VC++ 6.0 在個別操作上是存在差異的。 用MFC嚮導建立的對話方塊會自動生成OnInitDialog()函式。但是手動新增的對話方塊或者建立子對話方塊時就不會生成OnInitDialog()。 Visual Studio 2010 與 VC++ 6.0 的操作

在VisualStudio2008和2010新增ipp函式庫的方法

Intel的ipp函式庫包含的常用的訊號處理函式,是一款十分好用的函式包軟體,在安裝完相應的函式庫後,還需在開發工具中對其進行配置,本文以VS2008和VS2010為例,講述如何新增ipp函式庫。 (一)VS2008​ 1. 在電腦系統中新增環境變數 計算機——屬性——高階

海思編碼新增加密函式

在\trunk\platform\ZC\DMIPC3516\HS-CIPD-12C\modules\soe目錄下的SOEproducerDemo.c新增函式。 對應的庫放到\trunk\platform\ZC\DMIPC3516\HS-CIPD-12C\modules\so

Hive關於日期函式使用

1.時間戳函式 日期轉時間戳:從1970-01-01 00:00:00 UTC到指定時間的秒數 獲得當前時區的UNIX時間戳: select unix_timestamp(); 1533716607 將指定的時間轉為UNIX時間戳 :select uni

Hive 的複合資料結構簡介以及一些函式的用法說明

目錄[-] 一、map、struct、array 這3種的用法: 1、Array的使用 2、Map 的使用 3、Struct 的使用 4、資料組合 (不支援組合的複雜資料型別) 二、hive中的一些不常見函式的用法: 1、array_contains (

UDF打成jar包並新增Hive的自定義函式

好文章參考:https://blog.csdn.net/zwjzqqb/article/details/79042636,寫的很詳細。   廢話不多數,具體步驟 1. 先把java專案轉化一下成maven專案 (1)在專案上右擊, 選擇 configure ->Con

函式指標陣列用於表新增或刪除函式

說明: 指向函式的指標陣列,對於表中新增或刪除函式經常用到。 示例程式碼: #include <iostream> using namespace std; /* 適用於表中新增或

如何寫一個php擴充套件深度查詢與新增函式

寫擴充套件時經常遇到從一個多維的陣列中查詢元素,或把一個元素新增到多維陣列中,當維度超過3個時, 就會寫出一堆程式碼來比較繁瑣了,對於這種情況可以定義一個引數可變的函式解決 新增: void lycitea_helpers_common_depthadd(int args, cha

Hiveif函式和Mysqlifnull的轉換

1.在mysql中,ifnull函式的用法,其表示式如下:     IFNULL(expr1,expr2)     如果 expr1 不是 NULL,IFNULL() 返回 expr1,否則它返回 expr2。IFNULL()返

Hive的去重 :distinct,group by與ROW_Number()視窗函式

一、distinct,group by與ROW_Number()視窗函式使用方法 1. Distinct用法:對select 後面所有欄位去重,並不能只對一列去重。 (1)當distinct應用到多個欄位的時候,distinct必須放在開頭,其應用的範圍是其後面的所有欄位,而不只是緊挨著它的一個欄位,而且di

Opencv新增進度條及回撥函式

#include  "highgui.h"#include  "iostream"using namespace std;using namespace cv;VideoCapture video1("Seq04.avi");                                        in

MFC新增訊息處理函式的步驟

如何在MFC中新增訊息處理函式呢,不管是手動還是自動新增,大體上有下面三個步驟。 1、在類應用中新增訊息處理函式的宣告,以基於對話方塊的應用為例,在XXXDlg.h(XXX是工程的名字)檔案中新增類似如下的宣告: afx_msg  void  OnPaint();//可以有

UDF開發以及如何新增HIVE

自定義開發案例 1)建立一個java工程,並建立一個lib資料夾 2)將hive的jar包解壓後,將apache-hive-1.2.2-bin\lib檔案下的jar包都拷貝到java工程中。 3)建立一個類 package com.lzl.hive;

hive使用case、if:一個region統計業務(hive條件函式case、if、COALESCE語法介紹:CONDITIONAL FUNCTIONS IN HIVE

CREATE TABLE test_lmj_mdm_tmp AS SELECT guid, CONCAT('adn_',adn_id) AS adn, CONCAT('time_',substr(createtime,12,2)) AS hour, CONCAT('os_',os_id) AS os, cas