91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何自定義hive永久函數

發布時間:2021-12-03 17:54:44 來源:億速云 閱讀:309 作者:小新 欄目:云計算

這篇文章給大家分享的是有關如何自定義hive永久函數的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

需求原因:

hive本身提供一個nvl的函數,但是該函數只對null值起作用,現在的需求是不只是對null起作用,對“”這樣的空值也要起作用,所以需要自定義一個名叫nvls的函數,并集成到hive當中去。

具體步驟:

1:先寫好java文件內容如下:

package org.apache.hadoop.hive.ql.udf;

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

import org.apache.hadoop.io.Text;

public class MyNvl extends UDF {

public Text evaluate(final Text t,final Text x) {

if(t!=null){

if(t.toString().equals("")){

return x;

}

}else{

return x;

}

return t;

}

}

2:測試:

2.1:先打成jar包名叫lixiyuan.jar,然后上傳到服務器上。本人賬戶是zb_test。

Jar包放到/data/zb_test目錄下。

然后進入hive

選測試的數據庫:

Use test

然后添加jar包

Add jar /data/zb_test/lixiyuan.jar

然后創建函數

Create temporary function nvls as ‘org.apahce.hadoop.hive.ql.udf.MyNvl’;

然后就可以測試了

測試成功以后我們就要把集成到hive中去。

3:把函數集成到hive中去

先說一下添加永久函數的思路:首先hive里的函數是跟hive-exec-0.12.0-cdh6.0.0.jar個jar包有關的

具體的說就是我們要做兩件事:

1:先修改環境變量vi ./.bashrc。內容修改為為如下:

把CLASSPATH改成如下:

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/li

(為一行)

把剛剛寫的java文件編譯成class文件,然后添加到hive-exec-0.12.0-cdh6.0.0.jar解壓后的udf目錄下

2:修改hive-exec-0.12.0-cdh6.0.0.jar里的exec目錄下的FunctionRegistry文件,但是我們解壓出來的是都人家編譯好的,所以得需要我們找到源碼,找到FunctionRegistry.java文件后,往里面添加:

import org.apache.hadoop.hive.ql.udf.MyNvl;

registerUDF(“nvls”, MyNvl.class,false);

完成這兩個步驟就可以了。

但是問題來了:

完成第一個步驟是簡單的,完成第二個步驟就復雜一點了,因為咱們修改了FunctionRegistry.java文件后得編譯成class文件以后才能用來替換原來的FunctionRegistry.class文件。所以現在解決的是怎么編譯FunctionRegistry.java文件。

3:如何編譯FunctionRegistry.java文件:

因為FunctionRegistry.java里面有:import org.apache.hadoop.hive.ql.udf.MyNvl;

registerUDF(“nvls”, MyNvl.class,false);這樣的信息。

所以我們先把剛剛先新建這樣的一個目錄:

Org/apache/hadoop/hive/ql/udf然后往里面放MyNvl.class文件。

然后把這個org的目錄打成jar包。名叫hello.jar

Jar -cvf /data/zb_test/hello.jar /data/zb_test/org/

接著,修改環境變量:

把CLASSPATH改成如下:

export CLASSPATH=/data/zb_test/hello.jar:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/li

然后這樣就可以編譯FunctionRegistry.java文件了

Javac ./FunctionRegistry.java

然后用生成的FunctionRegistry.class文件替換原來的文件。然后重新把解壓的東西打包成:

hive-exec-0.12.0-cdh6.0.0.jar替換hive里原來的就ok了。

感謝各位的閱讀!關于“如何自定義hive永久函數”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

聂拉木县| 瑞丽市| 周口市| 五寨县| 吉安市| 封丘县| 蕲春县| 运城市| 郁南县| 德惠市| 南丹县| 吉隆县| 大石桥市| 静宁县| 双城市| 杭锦旗| 尼木县| 定远县| 永兴县| 嘉禾县| 上林县| 嘉祥县| 鲁山县| 衡南县| 洪湖市| 固镇县| 临海市| 沛县| 和顺县| 乐安县| 武义县| 富平县| 阜城县| 桐梓县| 舟山市| 涿鹿县| 来宾市| 浪卡子县| 义马市| 拜城县| 武安市|