ОШИБКА 1200: не удалось создать экземпляр com.test.commons.pig.udf.GroovyClosure с аргументами() - groovy


0

Предположим, у меня есть Groovy udfs, и мне нужно вызвать их в моем сценарии pig.

Там находятся /home/fs191/TraitementHadoopMDO/src/groovy/:

REGISTER /home/fs191/TraitementHadoopMDO/src/groovy/FormatageDonneeZero.groovy;
REGISTER /home/fs191/TraitementHadoopMDO/src/groovy/FormatageDonneeSpace.groovy;
REGISTER /home/fs191/TraitementHadoopMDO/src/groovy/MontantSansDecimales.groovy;
REGISTER /home/fs191/TraitementHadoopMDO/src/groovy/NbDecimales.groovy;

Затем я объявил их как:

DEFINE FormatageDonneeZero_groovy com.arkea.commons.pig.udf.GroovyClosure(ChaineZero:chararray,/src/groovy/FormatageDonneeZero.groovy);
DEFINE FormatageDonneeSpace_groovy com.arkea.commons.pig.udf.GroovyClosure(ChaineSpace:chararray,/src/groovy/FormatageDonneeSpace.groovy);
DEFINE MontantSansDecimales_groovy com.arkea.commons.pig.udf.GroovyClosure(ChaineSpace:chararray,/src/groovy/MontantSansDecimales.groovy);
DEFINE NbDecimales_groovy com.arkea.commons.pig.udf.GroovyClosure(Valeur:int,/src/groovy/NbDecimales.groovy);

Это содержимое первого (FormatageDonneeZero.groovy):

final def CLOSURE = {

        //Donnee,nbCaracteresActuels, nbCaracteresDemande ->

        donnee, nbCaracteresDemande ->

               String chaine = "";

                if (null != donnee ) {
                    chaine = String.valueOf(donnee);
                }

                def int0 = "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

                def nbAjout = 0;
                nbAjout = nbCaracteresDemande - chaine.length();

                def resultat = "";

                        if(nbAjout>0) {
                                resultat = int0.substring(0, nbAjout) + chaine;
                        }else{
                                resultat = chaine;
                        }

                return resultat;

};

// Test
assert CLOSURE("4", 2) == "04";
assert CLOSURE(4, 2) == "04";
assert CLOSURE(null, 2) == "00";
assert CLOSURE("", 2) == "00";


return CLOSURE;

Пример использования:

FormatageDonneeZero_groovy (NoEnrEntete, 10) AS NoEnrEntete,

Проблема в том, что когда я запускаю скрипт pig, я получаю следующее сообщение об ошибке:

2019-10-17 17:49:32,257 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: could not instantiate com.test.commons.pig.udf.GroovyClosure with arguments [ChaineZero:chararray,/src/groovy/FormatageDonneeZero.groovy]

В чем смысл этого, пожалуйста, спасибо

  •  49
  •  0
  • 11 май 2020 2020-05-11 10:17:35

Ответов пока нет