任何人都可以提供hive udf代码截断特定的列



我有一个包含双精度值42.2223的列。我想截断这一列的最后四位。

有谁能提供这个特定场景的hive UDF吗?

如果您想截断最后四位数字并得到一个整数,您可以使用内置函数floor(double a)ceiling(double a),这取决于您想要的舍入类型(上或下)。

如果您希望将您的双精度体截断到小数点后d位(并获得双精度体,而不是整数),您可以使用round(double a, int d)

编辑

为了不截断取整,可以使用

CAST((column * 100) AS int)/100

为上面的问题编写了一个UDF,我们可以指定可以截断的字符数

package com.hive.udf.truncate;
import java.math.BigDecimal;
import org.apache.hadoop.hive.ql.exec.UDF;
public class Trunc extends UDF {
    public double evaluate(double input,int numberOfDecimals){
       if ( input > 0) {
         return new BigDecimal(String.valueOf(input)).setScale(numberOfDecimals, BigDecimal.ROUND_FLOOR).doubleValue();
            } 
       else {
         return new BigDecimal(String.valueOf(input)).setScale(numberOfDecimals, BigDecimal.ROUND_CEILING).doubleValue();
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新