配置单元中的自动增量自定义项

von4xj4u  于 2021-06-04  发布在  Hadoop
关注(0)|答案(4)|浏览(398)

我在配置单元中创建了一个自定义项,以便在配置单元中添加自动增量列。

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

public class AutoIncrUdf extends UDF {
    int Value;

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

我创建了一个临时函数 temp 在我的table上用作

Select temp() from table1;

它将所有行作为:

1
 1
 1
 1

等等。但我想把它当作

1
2
3
4
l7mqbcuq

l7mqbcuq1#

我认为最好使用下面的代码在配置单元中自动增加自定义项:

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;
    }
}
zz2j4svz

zz2j4svz2#

应该有用。每个调用创建一个udf类示例。也许试试 static int Value; .. 德国劳埃德船级社

y1aodyip

y1aodyip3#

向类添加有状态属性:

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

添加注解 @UDFType(stateful = true) 否则计数器值不会在配置单元列中获得增量,它只会为所有行返回值1,而不是实际的行号。这和你面临的问题是一样的。

omjgkv6w

omjgkv6w4#

它对我有用。
请尝试以下方法:
http://svn.apache.org/repos/asf/hive/trunk/contrib/src/java/org/apache/hadoop/hive/contrib/udf/udfrowsequence.java
创建临时函数rowsequence作为.udfrowsequence';
从'table'中选择rowsequence(100)作为id,field1,field2,其中'condition';

相关问题