1

상수 매개 변수를 사용할 수있는 사용자 지정 UDF (UDAF/UDTF)를 작성하고 싶습니다.매개 변수가있는 하이브 UDF

예를 들어, COL은 최대 값을 찾을 값의 모음이고 i는 위치 (즉, i = 1, 가장 높은 것을 찾습니다. i)는 MAX (COL, i) = 2처럼 하이브 쿼리 보인다 있도록, 등), 두 번째로 높은 찾기 : 이것은 단지 MAX위한 것이 아닙니다

SELECT 
MAX(value, 2) 
FROM table; 

, 그래서 나는 이렇게 정렬,이 작업을 수행 할 수있는 일반적인 방법이 필요합니다 정렬 된 컬렉션에서 선택하면 작동하지 않습니다.

답변

3

ConstantObjectInspectors를 사용하여 상수 값을 매개 변수로 전달할 수 있습니다. GenericUDF 또는 GenericUDAFEvaluator의 init() 메소드의 initialize() 메소드에서 지정된 ObjectInspector가 ConstantObjectInspector의 인스턴스인지 확인하십시오. 캐스트하고있는 경우는 예외를 Throw합니다. 여기에 특정 유스 케이스 예

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(); 
     ...... 

들어

상위 N 키 및 최대 값을 수집 Brickhouse의 collect_max (http://github.com/klout/brickhouse)을 확인.