我有几个用Spark
编写的Scala
大数据应用程序。这些应用程序的另一个版本是用R
编写的。
我还有一个用Java
编写的Web服务器应用程序。这是作为Web GUI的API提供的。目的是使GUI能够执行这些应用程序并选择版本:R
或Spark
。我设法从R
API调用Java
代码并将结果发送到JSON
。但现在执行Spark
程序似乎相当复杂。
到目前为止,我能够将其中一个Scala
.jar文件与Java
API与Maven
合并。我这样做是将我的Spark
程序作为pom.xml
中的本地存储库,以便Scala
代码包含在最终的.jar包中。我还提到Scala
和breeze
库作为pom.xml
中的依赖项。当我尝试使用API发送请求时,当然会抛出一个错误,说java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$
。到目前为止,我意识到这是因为我没有在Spark
依赖项中提到Maven
库,但后来我认为我做错了,因为Spark
应用程序通常通过在终端中执行spark-submit
命令来运行。
所以我现在想的是将Java
API .jar和Scala
.jar放在一个文件夹中,然后从spark-submit
API .jar中执行Java
,目标是Scala
.jar。这甚至是正确的吗?以及如何从Java代码执行spark-submit
?它是否必须使用Runtime.exec()
中提到的here?
qazxsw我可以用来从Java Api代码提交spark代码(用scala编写,预编译的jar qazxsw poi放在某个位置)。
使用SparkLauncher的SparkLauncher
建议采用以下方式从Java应用程序内部以编程方式提交spark作业。在Java Api代码中添加以下代码。
scala.jar