Как динамически загружать разные версии банок в spark, используя scala - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть требование загружать различные версии jar-файлов анализатора в spark при применении преобразования.

Исполнитель должен вызвать метод синтаксического анализа синтаксического анализатора на основе полученной версии Xml.

Я попытался использовать загрузчик классов URL, но все же он дает мне исключение класса не найден

def parserCCDAMessageageDynamically (inputData: (String, String), applicationId: String, orgcode: String, envPath: String): (List [(String, List [Row])], (List [Row], List [Row])) = {

println("Handle the error codes  generated *********inputData._1.**********" + inputData._1)
var resultList = mutable.ListBuffer[(String, List[Row])]()
var listAuditDetails: mutable.ArrayBuffer[Row] = mutable.ArrayBuffer.empty
var listMetadata: mutable.ArrayBuffer[Row] = mutable.ArrayBuffer.empty

val objectName = "com.flblue.parser.ccda.driver.CDAParsingDriver"  

println("The object name " + objectName)


var classLoader = new URLClassLoader(Array[URL](new File("/opt/hdp/usr/data/test/mapa/cie/ccda_parser/interim/edifecs_integration/parser-r21/lib").toURI.toURL,
    new File("/opt/hdp/usr/data/test/mapa/cie/ccda_parser/interim/edifecs_integration/parser-r21/conf").toURI.toURL))

 println("The class loader us ais " + classLoader) 

val runtimeMirror = universe.runtimeMirror(classLoader)
val moduleSymbol = runtimeMirror.moduleSymbol(Class.forName(objectName))
val targetMethod = moduleSymbol.typeSignature.members.filter(x => x.isMethod && x.name.toString == "parseCDAWithFileName").head.asMethod

val output =runtimeMirror.reflect(runtimeMirror.reflectModule(moduleSymbol).instance).reflectMethod(targetMethod)(inputData._2,inputData._1, mapAsJavaMap(Map[String, String]()).asInstanceOf[java.util.Map[java.lang.String, java.lang.String]],mapAsJavaMap(Map[String, String]()).asInstanceOf[java.util.Map[java.lang.String, java.lang.String]])

println("The output is as fllows" +  output)

(resultList.toList, (listAuditDetails.toList, listMetadata.toList))

}

...