gpt4 book ai didi

java - 有没有办法在 Scala 或 Spark 中强制等待 java 进程结束?

转载 作者:行者123 更新时间:2023-12-02 09:54:24 24 4
gpt4 key购买 nike

在通过 Spark 部署的 Scala 应用程序中,我有一个代码行,它调用通过 JNI 执行 native C++ 代码的 Java 函数。此调用需要时间,如果它不是唯一一个正在运行的同类调用,则会出现资源使用冲突,并显示 *** 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调用。

所以我想知道是否有一种方法可以强制等到这个过程结束,然后再使用 Scala、Java 或 Spark 功能调用 agin。

最佳答案

您可以使用sys.process._您将使用脚本路径将shell脚本传递到以下进程函数。另外,您需要处理 shell 脚本以获得返回码。例如,如果 0 成功,则失败。请注意行尾的!。您还可以检查更多详细信息以从此tutorial运行快速命令行。

import scala.sys.process.Process
val externalShellScript = Process("sh", Seq(scriptPath)).!
if (externalShellScript != 0) {
throw new Exception(
"Error in executing external shell script from " + scriptPath)
}

除非此进程完成,否则 Spark 作业将不会继续。下面是简单的 shell 脚本和输出。

touch test.txt
echo "any massage"

控制台中的输出将是

any massage

关于java - 有没有办法在 Scala 或 Spark 中强制等待 java 进程结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56108249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com