Hadoop 带参数的配置单元UDF
我想编写一个可以接受常量参数的自定义UDF(UDAF/UDTF) 例如,我想编写一个函数MAX(COL,I),其中COL是查找MAX值的值的集合,I是位置(即I=1,查找最高值,I=2,查找第二最高值,等等),这样配置单元查询看起来像:Hadoop 带参数的配置单元UDF,hadoop,hive,apache-pig,user-defined-functions,user-defined-aggregate,Hadoop,Hive,Apache Pig,User Defined Functions,User Defined Aggregate,我想编写一个可以接受常量参数的自定义UDF(UDAF/UDTF) 例如,我想编写一个函数MAX(COL,I),其中COL是查找MAX值的值的集合,I是位置(即I=1,查找最高值,I=2,查找第二最高值,等等),这样配置单元查询看起来像: SELECT MAX(value, 2) FROM table; 这不仅仅适用于MAX,因此我需要一种通用的方法来实现这一点,因此从已排序的集合中进行排序和选择将不起作用。您可以使用ConstantObjectInspector获取作为参数传递的常量值。在Ge
SELECT
MAX(value, 2)
FROM table;
这不仅仅适用于MAX,因此我需要一种通用的方法来实现这一点,因此从已排序的集合中进行排序和选择将不起作用。您可以使用ConstantObjectInspector获取作为参数传递的常量值。在GenericUDF的initialize()方法或GenericUDAFEvaluator的init()中,检查指定的ObjectInspector是否是ConstantObjectInspector的实例。如果是强制转换,则抛出异常 比如说
public ObjectInspector init(Mode m, ObjectInspector[] parameters)
throws HiveException {
......
if(!( parameters[1] instanceof ConstantObjectInspector ) ) {
throw new HiveException("Position parameter must be constant.");
}
ConstantObjectInspector posOI = (ConstantObjectInspector) parameters[1];
pos = ((IntWritable) posOI.getWritableConstantValue()).get();
......
对于您在这里的特定用例,请查看Brickhouse()中的collect\u max
,它收集顶部的N键和max值