Модуль Scala, требующий определенной версии привязки данных для Spark

#java #scala #apache-spark #jackson-databind

#java #scala #apache-spark #jackson-привязка данных

Вопрос:

У меня возникают проблемы при попытке заставить Spark загружать, читать и запрашивать файл parquet. Инфраструктура, похоже, настроена (Spark standalone 3.0), ее можно увидеть, и она будет выполнять задания.

Проблема, с которой я сталкиваюсь, заключается в вызове этой строки

     Dataset<Row> parquetFileDF = sparkSession.read().parquet(parquePath);
  

выдается следующая ошибка

 Caused by: com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.10.0 requires Jackson Databind version >= 2.10.0 and < 2.11.0
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61)
  

Я изучил JacksonModule.setupModule , и когда он дойдет до context.getMapperVersion передаваемой версии, это 2.9.10. Мне кажется, что DefaultScalaModule использует какую-то более старую версию.

Я использую Gradle для сборки и настройки зависимостей как таковых

     implementation 'com.fasterxml.jackson.core:jackson-core:2.10.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0'
    implementation 'org.apache.spark:spark-core_2.12:3.0.0'
    implementation 'org.apache.spark:spark-sql_2.12:3.0.0'
    implementation 'org.apache.spark:spark-launcher_2.12:3.0.0'
    implementation 'org.apache.spark:spark-catalyst_2.12:3.0.0'
    implementation 'org.apache.spark:spark-streaming_2.12:3.0.0'
  

Это не сработало, поэтому я попытался принудительно привязать данные

     implementation ('com.fasterxml.jackson.core:jackson-databind') {
        version {
            strictly '2.10.0'
        }
    }
  

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

Любая помощь будет оценена.

Комментарии:

1. Вероятно, вы можете получить дополнительную помощь, если добавите вывод gradle dependencies (или ./gradlew dependencies если вы используете оболочку).

Ответ №1:

Я смог разобраться в проблеме. Я извлекал файл jar из другого проекта. Функциональность в файле jar вообще не использовалась, поэтому она не вызывала подозрений. К сожалению, этот проект не был обновлен, и были некоторые старые библиотеки Spark, которые каким-то образом подбирались моим текущим запущенным приложением. Как только я удалил это, ошибка исчезла. Интересно то, что график зависимостей ничего не показывал о библиотеках, которые использовал другой файл jar.

Я полагаю, если вы столкнетесь с подобной проблемой, дважды проверьте все импортируемые файлы jar.