簡體   English   中英

帶參數的Hive UDF

[英]Hive UDF With Parameters

我想編寫一個可以接受常量參數的自定義UDF(UDAF / UDTF)。

例如,我想寫一個函數MAX(COL,i),其中COL是值的集合,用於查找最大值,而i是位置(即i = 1,找到最高,i = 2,找到第二高等等,這樣Hive查詢看起來像:

SELECT
MAX(value, 2)
FROM table;

這不僅僅適用於MAX,所以我需要一種能夠做到這一點的一般方法,因此從排序的集合中排序和選擇將不起作用。

您可以使用ConstantObjectInspectors獲取作為參數傳遞的常量值。 在GenericUDA或.NET中的GenericUDF或init()的initialize()方法中,檢查指定的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_maxhttp://github.com/klout/brickhouse ),它收集前N個鍵和最大值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM