使用 spark-submit 通过命令行执行 scala 代码
Execution of scala Code through command line using spark-submit
我使用 IntelliJ IDEA 创建了一个 Scala 项目并创建了 JAR 文件。 I want to execute code with spark-submit.I 可以成功执行无需传递参数的代码。但是在这里我试图通过命令行传递参数但是它抛出错误。我的命令是
spark-submit --class BATalgo1[-10,10,100,5,4] \file:///out/artifacts/Spark_Stack_jar/Spark_Stack.
路径正确,抛出以下错误。
java.lang.ClassNotFoundException: BATalgo1[-10,10,100,5,4]
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:238)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:810)
at org.apache.spark.deploy.SparkSubmit.doRunMain(SparkSubmit.scala:167)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
at org.apache.spark.deploy.SparkSubmit$$anon.doSubmit(SparkSubmit.scala:924)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我的代码是,
object BATalgo1 {
def main(args: Array[String]): Unit = {
val t1 =System.nanoTime()
var MinVal = args(0).toInt //scala.io.StdIn.readDouble();
var MaxVal = args(1).toInt //scala.io.StdIn.readDouble();
var MaxIt = args(2).toInt //scala.io.StdIn.readDouble();
val N = args(3).toInt //scala.io.StdIn.readInt();
val d = args(4).toInt //scala.io.StdIn.readInt()
println("arguments are= ", MinVal,MaxVal , MaxIt ,N ,d )
}
}
尝试:
spark-submit --class BATalgo1 <your-executable-jar-file> -10 10 100 5 4
如果 main class BATalgo1
在包 com.package
中,将 BATalgo1
替换为 com.package.BATalgo1
。
命令行参数在 spark-submit 命令的最后传递。
更多信息请参考documentation。
我使用 IntelliJ IDEA 创建了一个 Scala 项目并创建了 JAR 文件。 I want to execute code with spark-submit.I 可以成功执行无需传递参数的代码。但是在这里我试图通过命令行传递参数但是它抛出错误。我的命令是
spark-submit --class BATalgo1[-10,10,100,5,4] \file:///out/artifacts/Spark_Stack_jar/Spark_Stack.
路径正确,抛出以下错误。
java.lang.ClassNotFoundException: BATalgo1[-10,10,100,5,4]
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:238)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:810)
at org.apache.spark.deploy.SparkSubmit.doRunMain(SparkSubmit.scala:167)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
at org.apache.spark.deploy.SparkSubmit$$anon.doSubmit(SparkSubmit.scala:924)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我的代码是,
object BATalgo1 {
def main(args: Array[String]): Unit = {
val t1 =System.nanoTime()
var MinVal = args(0).toInt //scala.io.StdIn.readDouble();
var MaxVal = args(1).toInt //scala.io.StdIn.readDouble();
var MaxIt = args(2).toInt //scala.io.StdIn.readDouble();
val N = args(3).toInt //scala.io.StdIn.readInt();
val d = args(4).toInt //scala.io.StdIn.readInt()
println("arguments are= ", MinVal,MaxVal , MaxIt ,N ,d )
}
}
尝试:
spark-submit --class BATalgo1 <your-executable-jar-file> -10 10 100 5 4
如果 main class BATalgo1
在包 com.package
中,将 BATalgo1
替换为 com.package.BATalgo1
。
命令行参数在 spark-submit 命令的最后传递。
更多信息请参考documentation。