首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换默认导入的库Spark的类路径

替换默认导入的库Spark的类路径
EN

Stack Overflow用户
提问于 2019-04-05 21:20:05
回答 2查看 194关注 0票数 1

我目前正在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.cloudera1org.apache.spark:spark-sql_2.11:2.1.0.cloudera1都依赖的库)。

我在build.gradle中的依赖项如下

代码语言:javascript
复制
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的输出显示依赖关系已更新

代码语言:javascript
复制
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版本?

EN

回答 2

Stack Overflow用户

发布于 2019-04-06 17:10:08

我相信CDH提供的库比你的库更重要。

您可以使用spark2-shell中的下一段代码检查这一点:

代码语言:javascript
复制
import java.lang.ClassLoader
val cl = ClassLoader.getSystemClassLoader
cl.asInstanceOf[java.net.URLClassLoader].getURLs.foreach(println)

我通常使用shade插件来克服它。

票数 0
EN

Stack Overflow用户

发布于 2019-04-07 00:37:00

Spark有一个选项,可以让用户类路径优先于自己的路径。Classpath resolution between spark uber jar and spark-submit --jars when similar classes exist in both

最有可能的是,你也应该研究一下着色。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55536350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档