public static VectorPTFEvaluatorBase[] getEvaluators(VectorPTFDesc vectorPTFDesc, VectorPTFInfo vectorPTFInfo) {
    String[] evaluatorFunctionNames = vectorPTFDesc.getEvaluatorFunctionNames();
    boolean[] evaluatorsAreDistinct = vectorPTFDesc.getEvaluatorsAreDistinct();
    int evaluatorCount = evaluatorFunctionNames.length;
    WindowFrameDef[] evaluatorWindowFrameDefs = vectorPTFDesc.getEvaluatorWindowFrameDefs();
    VectorExpression[][] evaluatorInputExpressions = vectorPTFInfo.getEvaluatorInputExpressions();
    Type[][] evaluatorInputColumnVectorTypes = vectorPTFInfo.getEvaluatorInputColumnVectorTypes();

    int[] outputColumnMap = vectorPTFInfo.getOutputColumnMap();

    VectorPTFEvaluatorBase[] evaluators = new VectorPTFEvaluatorBase[evaluatorCount];
    for (int i = 0; i < evaluatorCount; i++) {
      String functionName = evaluatorFunctionNames[i].toLowerCase();
      boolean isDistinct = evaluatorsAreDistinct[i];
      WindowFrameDef windowFrameDef = evaluatorWindowFrameDefs[i];
      SupportedFunctionType functionType = VectorPTFDesc.supportedFunctionsMap.get(functionName);
      VectorExpression[] inputVectorExpressions = evaluatorInputExpressions[i];
      final Type[] columnVectorTypes = evaluatorInputColumnVectorTypes[i];

      // The output* arrays start at index 0 for output evaluator aggregations.
      final int outputColumnNum = outputColumnMap[i];

      VectorPTFEvaluatorBase evaluator =
          VectorPTFDesc.getEvaluator(functionType, isDistinct,
              windowFrameDef, columnVectorTypes, inputVectorExpressions, outputColumnNum);

      evaluators[i] = evaluator;
    }
    return evaluators;
  }
VectorPTFDesc.

Extra parameters beyond PTFDesc just for the VectorPTFOperator.

We don't extend PTFDesc because the base OperatorDesc doesn't support
clone and adding it is a lot work for little gain.
ql/src/java/org/apache/hadoop/hive/ql/plan/VectorPTFDesc.java