我在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
答案 0 :(得分:0)
它应该工作。每次调用都会创建一个UDF类实例。也许试试static int Value;
.. GL
答案 1 :(得分:0)
向您的班级添加有状态属性:
@UDFType(stateful = true)
public class AutoIncrUdf extends UDF {
...
}
需要添加注释@UDFType(stateful = true)
,否则计数器值将不会在Hive列中获得增量,它将仅返回所有行的值1,但不返回实际的行号。这与您面临的问题相同。
答案 2 :(得分:0)
它对我有用。
试试以下内容:
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;
}
}