2017-07-05 3 views
0

Une erreur d'exécution étrange lors de l'utilisation de la bibliothèque JPMML (avec guava).Erreur: com.google.common.cache.CacheBuilder.from (Lcom/google/commun/cache/CacheBuilderSpec;) Lcom/google/common/cache/CacheBuilder;

J'ai utilisé les dépendances liées à jpmml dans mon pom.xml comme ci-dessous

<dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-evaluator</artifactId> 
     <version>1.3.6</version> 
     </exclusions> 
    </dependency> 

Il a commencé à jeter l'exception. Puis j'ai essayé comme ci-dessous.

<dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>19.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-evaluator</artifactId> 
     <version>1.3.6</version> 
     <exclusions> 
      <exclusion> 
       <groupId>com.google.guava</groupId> 
       <artifactId>guava</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

J'ai essayé avec 11.x/12.x/15.x/18.x/19.x/20.x versions de goyave Mais je suis face à la même exception. Je suis passé par google et les gens ont utilisé la version guava-19.0 et cela a fonctionné pour eux, mais je ne suis pas capable d'y parvenir. Quelqu'un peut-il me dire s'il me manque quelque chose?

Veuillez trouver la trace complète de la pile ci-dessous.

java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.from(Lcom/google/common/cache/CacheBuilderSpec;)Lcom/google/common/cache/CacheBuilder; 
    at org.jpmml.evaluator.CacheUtil.newCacheBuilder(CacheUtil.java:97) 
    at org.jpmml.evaluator.CacheUtil.buildLoadingCache(CacheUtil.java:90) 
    at org.jpmml.evaluator.ModelEvaluator.<clinit>(ModelEvaluator.java:660) 
    at org.jpmml.evaluator.ModelEvaluatorFactory.newModelEvaluator(ModelEvaluatorFactory.java:80) 
    at org.jpmml.evaluator.ModelEvaluatorFactory.newModelEvaluator(ModelEvaluatorFactory.java:66) 
..... 
..... 
+0

Vous êtes sûr de ne pas avoir utilisé une ancienne version (antérieure à 12.0) de Guava ailleurs dans votre POM? Probablement une dépendance transitive d'une certaine sorte? –

+0

Je l'ai vérifié je n'utilise pas d'autres versions de bibliothèques de guava. – Manindar

+2

Avez-vous essayé quelque chose comme 'mvn dependency: tree -Dverbose | grep goyave'? –

Répondre

1

On dirait que vous avez la version correcte dans maven pom, mais lors de l'exécution, il est de choisir ancienne version, assurez-vous qu'il prend la bonne version au moment de l'exécution. Vérifiez votre chemin de classe sur les nœuds de données.

+0

J'utilise cloudera hadoop, et class_path donné aux nœuds de données par cloudera lui-même. Je pense que nous devrions faire quelques réglages dans pom pour choisir quelle version de jar (goyave) doit être utilisée par le code. – Manindar

+0

Dans ce cas, je voudrais créer un pot Uber avec toutes les dépendances. – Rakesh

+0

Cela a fonctionné maintenant. J'ai utilisé ce code. conf.setBoolean (MRJobConfig.MAPREDUCE_JOB_USER_CLASSPATH_FIRST, true); – Manindar