0

我在 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

4 回答 4

1

我认为最好在 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;
    }
}
于 2016-05-24T07:32:50.537 回答
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) AS id, field1, field2 from 'table' where 'condition';

于 2013-08-31T07:03:46.590 回答
0

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

于 2013-02-05T00:46:47.287 回答
0

向您的类添加有状态属性:

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

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

于 2013-06-26T09:55:47.843 回答