国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

hive自定義函數的學習筆記

2024-08-27 23:58:48
字體:
來源:轉載
供稿:網友

hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行下面我們來看看.

Hive可以將類sql查詢語句轉換成Hadoop的map reduce任務,讓熟悉關系型數據庫的人也可以利用hadoop的強大并行計算能力,Hive提供了強大的內置函數支持,但是總有一些特殊情況,內置函數無法覆蓋,這就要求我們對定義自己的函數,接下來我們通過一個例子看一下如何自定義hive函數.

1.自定義函數的實現

假設我們的關系型數據庫中user表有一個status字段,代表著用戶的活躍等級,取值為1~10,活躍度一次遞增,現在我們要根據status字段將用戶分為3個活躍度等級,Hive顯然沒有這種與業務邏輯強耦合的內置函數,但這不應該成為阻礙我們使用Hive的理由,下面的擴展函數就可以滿足需求.

  1. package com.test.example; 
  2. import org.apache.hadoop.hive.ql.exec.Description; 
  3. import org.apache.hadoop.hive.ql.exec.UDF; 
  4. import org.apache.hadoop.io.Text; 
  5. public class UserStatus extends UDF { 
  6.    public Text evaluate(Text input) { 
  7.      if(input == null) return null; 
  8.      int status= Integer.parseInt(input.toString()); 
  9.      if(status>= 1 && status<= 3){ 
  10.          return new Text(String.valueOf(1)); 
  11.      }else if(status>=4 && status<=7){ 
  12.          return new Text(String.valueOf(2)); 
  13.      }else if(status>=7 && status<=10){ 
  14.          return new Text(String.valueOf(3)); 
  15.      }  //Vevb.com 
  16.      return null; 
  17.    } 

從上面的例子可以看出實現自定義的hive函數還是相當簡單的,就是繼承org.apache.hadoop.hive.ql.exec.UDF 并實現execute函數.

2.自定義函數的使用

定義為自定義函數后該如何使用呢?其實也是相關簡單的,假設包含自定義函數的jar包為mydf.jar.

(1).在hive shell中加載,首先加載jar包,并創建臨時函數.

  1. %> hive 
  2. hive> ADD JAR /path/to/mydf.jar; 
  3. hive> create temporary function userStatus as 'com.test.example.UserStatus'

然后就可以直接使用了.

hive> select userStatus(4);

但是每次使用都要加載一次,太費勁了,有沒有別的方法呢.

(2).在.hiverc中加載

編輯home目錄下的.hiverc文件,如果沒有這個文件就新建一個,將加載jar包的命令寫入.hiverc文件,啟動hive shell時會自動執行.hiverc文件,不需要每個shell都load一遍.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博爱县| 民县| 芜湖县| 石渠县| 四川省| 武隆县| 社旗县| 类乌齐县| 桓仁| 仪征市| 石棉县| 中江县| 银川市| 阿巴嘎旗| 宁武县| 金山区| 黄骅市| 曲松县| 应城市| 颍上县| 视频| 徐闻县| 河北区| 绍兴县| 江津市| 专栏| 墨脱县| 工布江达县| 额尔古纳市| 莆田市| 黑山县| 乌拉特中旗| 淮滨县| 永城市| 镇赉县| 错那县| 卓尼县| 梅河口市| 娄烦县| 延寿县| 房山区|