使用spark-submit通过命令行执行scala代码

时间:2019-06-23 08:38:53

标签: scala command-line spark-submit

我已经使用IntelliJ IDEA创建了一个Scala项目并创建了JAR文件。我想使用spark-submit执行代码。我可以成功执行不需要传递任何参数的代码。但是在这里我试图通过命令行传递参数,但是会引发错误。我的命令是

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$1(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$2.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 )
 }
}

1 个答案:

答案 0 :(得分:2)

尝试:

namespace detail {
    template <char... C>
    constexpr int boo()
    {
        /* ... */
    }
}

template <char... C>
constexpr auto foo()
{
    /* ... detail::boo<C...>() ... */
}

如果主类spark-submit --class BATalgo1 <your-executable-jar-file> -10 10 100 5 4 位于包BATalgo1中,则将com.package替换为BATalgo1

命令行参数在spark-submit命令的最后一个传递。

请参考documentation以获得更多信息。