0

Мое приложение представляет собой проект java maven, в котором используется Spark. Вот раздел в моем П, который добавляет Стэнфорд coreNLP зависимостей:Почему google dataproc не вытаскивает банки coreNLP, хотя они включены в файл POM?

 <dependency> 
      <groupId>edu.stanford.nlp</groupId> 
      <artifactId>stanford-corenlp</artifactId> 
      <version>3.6.0</version> 
     </dependency> 
     <dependency> 
      <groupId>edu.stanford.nlp</groupId> 
      <artifactId>stanford-corenlp</artifactId> 
      <version>3.6.0</version> 
      <classifier>models</classifier> 
     </dependency> 

Я получаю следующее сообщение об ошибке:

java.lang.NoClassDefFoundError: edu/stanford/nlp/pipeline/StanfordCoreNLP 

есть другая зависимость, например, Spark и dataproc прекрасно их подтягивают. Теперь я добавил coreNLP, и он отлично работает на моем ноутбуке, но не работает в google dataproc.

ответ

2

В классе Dataproc предусмотрены классы «искры», поскольку они считаются частью базового распределения наряду с другими пакетами, связанными с Hadoop, такими как hadoop-client. Другие библиотеки, которые не являются частью базового дистрибутива, должны быть упакованы как часть вашего «fatjar» с использованием Maven shade plugin.

Как правило, это руководство по наилучшей практике, поскольку «предоставленная» среда должна быть как можно более беззаботной относительно зависимостей версий, и таким образом вы можете при необходимости принести свою версию corenlp, не беспокоясь о конфликтах версий на Dataproc окружающей среды или даже использовать вашу собственную разветвленную версию библиотек corenlp.

+0

имеет смысл. Большое спасибо! – Kai