Заменить библиотеку, импортированную по умолчанию, путь к классу Spark - PullRequest
4 голосов
/ 05 апреля 2019

В настоящее время я работаю над проектом в Spark 2.1.0, и мне нужно импортировать библиотеку, от которой уже зависит сама Spark. В частности, я хочу org.roaringbitmap:RoaringBitmap:0.7.42 заменить org.roaringbitmap:RoaringBitmap:0.5.11 (библиотека, от которой зависят org.apache.spark:spark-core_2.11:2.1.0.cloudera1 и org.apache.spark:spark-sql_2.11:2.1.0.cloudera1).

Мои зависимости в build.gradle следующие

dependencies {
    compile 'org.apache.spark:spark-core_2.11:2.1.0.cloudera1'
    runtime ('org.apache.spark:spark-core_2.11:2.1.0.cloudera1') {
        exclude group: 'org.roaringbitmap'
    }
    compile 'org.apache.spark:spark-sql_2.11:2.1.0.cloudera1'
    runtime ('org.apache.spark:spark-sql_2.11:2.1.0.cloudera1') {
        exclude group: 'org.roaringbitmap'
    }
    compile 'org.roaringbitmap:RoaringBitmap:0.7.42'
    implementation 'org.roaringbitmap:RoaringBitmap'
    constraints {
        implementation('org.roaringbitmap:RoaringBitmap:0.7.42') {
            because 'because of transitive dependency'
        }
    }
}

Вывод gradle -q dependencyInsight --dependency org.roaringbitmap показывает, что зависимость была обновлена ​​

org.roaringbitmap:RoaringBitmap -> 0.7.42
   variant "default+runtime" [
      org.gradle.status = release (not requested)
      Requested attributes not found in the selected variant:
         org.gradle.usage  = java-api
   ]
\--- compileClasspath

org.roaringbitmap:RoaringBitmap:0.5.11 -> 0.7.42
   variant "default+runtime" [
      org.gradle.status = release (not requested)
      Requested attributes not found in the selected variant:
         org.gradle.usage  = java-api
   ]
\--- org.apache.spark:spark-core_2.11:2.1.0.cloudera1
     +--- compileClasspath
     +--- org.apache.spark:spark-sql_2.11:2.1.0.cloudera1
     |    \--- compileClasspath
     \--- org.apache.spark:spark-catalyst_2.11:2.1.0.cloudera1
          \--- org.apache.spark:spark-sql_2.11:2.1.0.cloudera1 (*)

К сожалению, когда я запускаю свое приложение с spark2-submit, фактическая версия зависимости времени выполнения - org.roaringbitmap:RoaringBitmap:0.5.11.

Как заставить мое приложение использовать нужную версию RoaringBitmap?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Spark имеет возможность расставить приоритеты пути к классам пользователей по сравнению с собственным. Разрешение пути к классу между spark uber jar и spark-submit --jars, когда в обоих *

* 1004 существуют похожие классы. Скорее всего, вам также следует рассмотреть затенение.
0 голосов
/ 06 апреля 2019

Я считаю, что библиотеки, предоставленные CDH, в любом случае имеют приоритет перед вашими библиотеками.

Вы можете проверить это, используя следующий фрагмент кода в spark2-shell:

import java.lang.ClassLoader
val cl = ClassLoader.getSystemClassLoader
cl.asInstanceOf[java.net.URLClassLoader].getURLs.foreach(println)

Обычно я использую плагин shade для его преодоления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...