private Method findMethod(Class<?> clz, Object[] args) throws LocalRunException {
    if (args == null || args.length == 0) {
      throw new LocalRunException("Input data can't be null");
    }
    Method method = ClassUtils.findMethod(clz, "evaluate", args);
    // method "evaluate" can't be static
    if (Modifier.toString(method.getModifiers()).contains("static")) {
      throw new LocalRunException("'evaluate' method can't be static");
    }

    return method;
  }
  public UDFRunner(Odps odps, String className) throws LocalRunException {
    super(odps);
    if (StringUtils.isBlank(className)) {
      throw new IllegalArgumentException("Missing arguments:className");
    }

    try {
      udf = (UDF) ClassUtils.newInstance(UDFRunner.class.getClassLoader(), className);

      SecurityClient.open();
      udf.setup(context);

    } catch (LocalRunException e) {
      throw e;
    } catch (UDFException e) {
      throw new LocalRunException(e);
    } finally {
      SecurityClient.close();
    }
  }