Table of Contents
问题
在开发Spark程序时,有时候需要动态加载jar包到系统的 classpath 。
例如,file:///xxx.jar 包中存在一个类A的子类AA,A类在当前Spark
程序中存在,但是没有子类AA,
val jarPath = lines(1) val myJar = Array(new Path(jarPath).toUri.toURL) log.info(s"Load jar $jarPath") val parentLoader = Thread.currentThread().getContextClassLoader val classLoader = new URLClassLoader(myJar, parentLoader) val a = classLoader.loadClass("AA").newInstance().asInstanceOf[A]
如果AA操作要用到SparkContext,那么将会报错 java.lang.ClassNotFoundException
。
可以通过将jar包增加到上下文中,解决此问题!
sc.addJar(jarPath)