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

时间:2016-10-19 04:49:39

标签: hive-udf

我有一个包含双值42.2223的列。我想截断这个特定列的后四位数。

任何人都可以为此特定场景提供配置UDF吗?

2 个答案:

答案 0 :(得分:0)

如果要截断最后四位数并获得整数,可以使用内置函数floor(double a)ceiling(double a),具体取决于舍入的类型(上限或下限)你想要的。

如果您希望将double缩减为d小数位(并获得双精度而不是整数),则可以使用round(double a, int d)

EDITED

为了在不截断的情况下进行舍入,您可以使用此

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

答案 1 :(得分:0)

为上述问题写了一个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();
        }
    }
}