我想使用自己的应用程序Spark jars。更多具体内容我有一个尚未发布的mllib包含一个固定的BisectingKMeans错误。所以,我的想法是在我的火花集群中使用它(在本地它完美地工作)。
我尝试过很多东西:extraclasspath,userClassPathFirst,jars选项......很多选项都不起作用。我的最后一个想法是使用sbt的Shade规则将所有org.apache.spark。*包更改为shadespark。*但是当我部署它时仍然使用集群'spark jars。
有什么想法吗?
答案 0 :(得分:0)
您可以尝试使用Maven shade插件重新定位冲突的包。这为mllib jar的较新版本创建了一个单独的命名空间。因此,旧版本和新版本都将在类路径中,但由于新版本具有替代名称,因此您可以明确地引用更新的包。
查看https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html:
如果将uber JAR重用为某个其他项目的依赖项,则直接在uber JAR中包含工件的依赖项中的类可能会因类路径上的重复类而导致类加载冲突。要解决此问题,可以重新定位包含在着色工件中的类,以便创建其字节码的私有副本:
我从视频“编写Spark应用程序时的五大错误”中得到了这个想法:https://youtu.be/WyfHUNnMutg?t=23m1s