В приложении Scala, развернутом через Spark, у меня есть строка кода, которая вызывает функцию Java, выполняющую собственный код C ++ через JNI. Этот вызов требует времени, и если он не единственный в своем роде, возникает конфликт использования ресурса с *** stack smashing detected ***: <unknown> terminated
.
Вот вызов, и его объем:
[spark RDD].mapPartitionsWithIndex(f = (index: Int, it: Iterator[Row]) => {
val sourceData: String = it.mkString()
val result: List[List[String]] = new WrapperClass(sourceData, [misc parameters).getResult
[wrinting result to a file]
}).take(1)
Мой WrapperClass.getResult
, очень просто, выглядит так:
[java call related variables initialization]
UnitexJni.execUnitexTool("UnitexTool {InstallLingResourcePackage -p " + appliedPkg + " -x " + resDir + "} " + "{" + runScriptCmd + "} " + "{InstallLingResourcePackage -p " + appliedPkg + " -x " + resDir + " --uninstall}")
[retrieving, formatting and returning result]
UnitexJni.execUnitexTool()
- это вызов Java.
Так что я хотел бы знать, есть ли способ заставить ждать до конца этого процесса, прежде чем вызывать его через agin, используя функциональность Scala, Java или Spark.