2017-02-22 8 views
0

Вот мой код:Почему это исключение возникает при запуске java-кода с помощью Spark и Standford NLP?

try 
{ 

    Dataset<Row> df = spark.sql("select answer from health where limit 1"); 

    nameAndCity = df.toJavaRDD().map(new Function<Row, String>() { 

    // @Override 
     public String call(Row row) { 
      return row.getString(0); 
     } 
    }).collect(); 

} 

catch (Exception AnalysisException) 
{ 
    System.out.print("\nTable is not found\n"); 
} 
spark.close(); 
System.out.println("Spark Done....!"); 
for (String name : nameAndCity) 
{ 

    Annotation document = new Annotation(name); 
    Properties props = new Properties(); 
    props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,parse,sentiment"); 
    //props.setProperty("parse.binaryTrees","true"); 
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 
    pipeline.annotate(document); 
    for (CoreMap sentence : document.get(CoreAnnotations.SentencesAnnotation.class)) { 
     System.out.println("---"); 
     System.out.println("Sentence Analyzed: " + " " + sentence.get(CoreAnnotations.TextAnnotation.class)); 
     System.out.println("Reflected sentiment: " + " " + sentence.get(SentimentCoreAnnotations.SentimentClass.class)); 
    } 

} 

После выполнения этого кода, я получаю следующее исключение:

Exception in thread "main" edu.stanford.nlp.util.ReflectionLoading$ReflectionLoadingException: Error creating edu.stanford.nlp.time.TimeExpressionExtractorImpl 
    at edu.stanford.nlp.util.ReflectionLoading.loadByReflection(ReflectionLoading.java:40) 
    at edu.stanford.nlp.time.TimeExpressionExtractorFactory.create(TimeExpressionExtractorFactory.java:57) 
    at edu.stanford.nlp.time.TimeExpressionExtractorFactory.createExtractor(TimeExpressionExtractorFactory.java:38) 
    at edu.stanford.nlp.ie.regexp.NumberSequenceClassifier.<init>(NumberSequenceClassifier.java:86) 
    at edu.stanford.nlp.ie.NERClassifierCombiner.<init>(NERClassifierCombiner.java:136) 
    at edu.stanford.nlp.pipeline.AnnotatorImplementations.ner(AnnotatorImplementations.java:121) 
    at edu.stanford.nlp.pipeline.AnnotatorFactories$6.create(AnnotatorFactories.java:273) 
    at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:152) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.construct(StanfordCoreNLP.java:451) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:154) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:150) 
    at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:137) 
    at spark.sparkhive.queryhive.main(queryhive.java:64) 
Caused by: edu.stanford.nlp.util.MetaClass$ClassCreationException: MetaClass couldn't create public edu.stanford.nlp.time.TimeExpressionExtractorImpl(java.lang.String,java.util.Properties) with args [sutime, {}] 
    at edu.stanford.nlp.util.MetaClass$ClassFactory.createInstance(MetaClass.java:237) 
    at edu.stanford.nlp.util.MetaClass.createInstance(MetaClass.java:382) 
    at edu.stanford.nlp.util.ReflectionLoading.loadByReflection(ReflectionLoading.java:38) 
    ... 12 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at edu.stanford.nlp.util.MetaClass$ClassFactory.createInstance(MetaClass.java:233) 
    ... 14 more 
Caused by: java.lang.NoClassDefFoundError: de/jollyday/ManagerParameter 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at edu.stanford.nlp.time.Options.<init>(Options.java:87) 
    at edu.stanford.nlp.time.TimeExpressionExtractorImpl.init(TimeExpressionExtractorImpl.java:44) 
    at edu.stanford.nlp.time.TimeExpressionExtractorImpl.<init>(TimeExpressionExtractorImpl.java:39) 
    ... 19 more 
Caused by: java.lang.ClassNotFoundException: de.jollyday.ManagerParameter 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 24 more 
17/02/22 18:26:39 INFO ShutdownHookManager: Shutdown hook called 
17/02/22 18:26:39 INFO ShutdownHookManager: Deleting directory /tmp/spark-23b5fac2-27ec-44a6-9ff7-cb2b8bfd8753 

Почему я получаю это исключение и то, что я должен сделать, чтобы решить это?

+1

Потому что либо 'de.jollyday.ManagerParameter' не найден, либо есть проблема с загрузкой (несоответствие версии и т. Д.). –

+0

Отличное наблюдение. –

+0

Вы могли бы снова сопоставить() с «CoreMap» со строками. Dont need collect() до тех пор, пока функции NLP –

ответ

1

Это один является источником вашей проблемы:

java.lang.NoClassDefFoundError: de/jollyday/ManagerParameter 

Ваша программа ищет для этого класса, но не могу найти его. Проверьте свой путь к классам.

Вы можете игнорировать предыдущие исключения в выходе, потому что это всего лишь реакция на исходное исключение.

  • ReflectionLoadingException вызывается методом LoadByReflection, поэтому он кажется исключением для оболочки и не может вам рассказать много.
  • Тогда у нас есть ClassCreationException, созданный createInstance, вроде той же ситуации. В общем случае, если у вас есть метод, называемый doSomething, который вызывает DoSomethingException, исключение либо собирается точно указать вам, в чем проблема («x должно быть> = 100»), либо обернуть фактическое исключение.
  • InvocationTargetException - это просто исключение, которое JVM создает, когда вы пытаетесь вызвать метод с использованием отражения, и этот метод выдает исключение. Опять же, это просто оболочка для фактического исключения.
  • Наконец, мы получаем фактическое исключение NoClassDefFoundError.
+0

Благодарим вас за ответ. –

Смежные вопросы