我目前正在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版本?
发布于 2019-04-06 17:10:08
我相信CDH提供的库比你的库更重要。
您可以使用spark2-shell中的下一段代码检查这一点:
import java.lang.ClassLoader
val cl = ClassLoader.getSystemClassLoader
cl.asInstanceOf[java.net.URLClassLoader].getURLs.foreach(println)我通常使用shade插件来克服它。
发布于 2019-04-07 00:37:00
Spark有一个选项,可以让用户类路径优先于自己的路径。Classpath resolution between spark uber jar and spark-submit --jars when similar classes exist in both
最有可能的是,你也应该研究一下着色。
https://stackoverflow.com/questions/55536350
复制相似问题