自动增量udf在蜂巢中

时间:2013-02-04 10:43:12

标签: hadoop user-defined-functions hive

我在hive中创建了一个udf来在hive中添加自动增量列。

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

public class AutoIncrUdf extends UDF {
    int Value;

    public int evaluate() {
        Value++;
        return Value;
    }
}  

我在我的桌子上用作

时创建了一个临时函数temp
Select temp() from table1; 

它将所有行设为:

 1
 1
 1
 1 

等等。但我希望它为

1
2
3
4

4 个答案:

答案 0 :(得分:0)

它应该工作。每次调用都会创建一个UDF类实例。也许试试static int Value; .. GL

答案 1 :(得分:0)

向您的班级添加有状态属性:

@UDFType(stateful = true)
public class AutoIncrUdf extends UDF {
    ...
}

需要添加注释@UDFType(stateful = true),否则计数器值将不会在Hive列中获得增量,它将仅返回所有行的值1,但不返回实际的行号。这与您面临的问题相同。

答案 2 :(得分:0)

它对我有用。

试试以下内容:

http://svn.apache.org/repos/asf/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/udf/UDFRowSequence.java

CREATE TEMPORARY FUNCTION rowSequence AS .UDFRowSequence';

SELECT rowSequence(100)来自'table'的AS id,field1,field2,其中'condition';

答案 3 :(得分:0)

我认为最好在hive中使用下面的代码来自动增量udf:

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

@UDFType(deterministic = false)
public class AutoIncrementUDF extends UDF {

    int ctr ;

    public int evaluate() {
        ctr++;
        return ctr;
    }
}