Hive自定義UDF函數(shù)

將科學(xué)計(jì)數(shù)法轉(zhuǎn)成decimal

編寫java


package cn.bdp.udf;

import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.math.BigDecimal;

@Description(name = "number_convert",
        value = "_FUNC_(string) - Convert a string to bigDecimal ,return str.")
public class NumberConvertUDF extends UDF {

    public String evaluate(String str) {
        if (str == null) {
            return "0";
        }
        try {
            BigDecimal bd = new BigDecimal(str);
            String result = bd.toPlainString();
            return result;
        } catch (Exception e) {
            return "0";
        }
    }
}

打包生成my_udf_jar.jar

創(chuàng)建自定義函數(shù)

# 將jar包上傳到HDFS
hive> add jar /tmp/my_udf_jar.jar;

# 將jar包上傳到HDFS
hive> create temporary function number_convert as 'cn.bdp.udf.NumberConvertUDF ';

hive> select number_convert("4.548820080129802E-4");

0.0004548820080129802

hive> select CAST( number_convert("4.548820080129802E-4") AS decimal(9,5) )  ;

0.00045

更新jar包操作

# 列出所有jar
hive> list jars;

# 刪除對(duì)應(yīng)的tmp
hive> delete jar /tmp/448a59e7-5ef8-4b76-8eed-ba04c73e126a_resources/udf-1.0.jar;

hive> DROP TEMPORARY FUNCTION number_convert;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容