Apache spark 使用Shell脚本文件提交Spark作业

Apache spark 使用Shell脚本文件提交Spark作业,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我正在尝试从shell脚本提交Spark作业 这是一个简单的脚本,只需使用spark submit命令。我试图通过spark submit命令为我的主函数提供参数,但当我尝试执行shell文件时,作业失败,出现错误: scala.MatchError: rma (of class java.lang.String) 正如我在代码中使用的match case一样 这是我的Shell脚本的内容 #adsName=$1 spark-submit --class TestQuery

我正在尝试从shell脚本提交Spark作业

这是一个简单的脚本,只需使用spark submit命令。我试图通过spark submit命令为我的主函数提供参数,但当我尝试执行shell文件时,作业失败,出现错误:

scala.MatchError: rma (of class java.lang.String) 
正如我在代码中使用的match case一样

这是我的Shell脚本的内容

    #adsName=$1
    spark-submit --class TestQuery --master yarn --deploy-mode cluster \
--driver-memory 12G --executor-memory 8G --executor-cores 4 \
--num-executors 100 --files /opt/mapr/spark/spark-2.1.0/conf/hive-site.xml \
--jars /users/myuser/config-1.2.0.jar \
/users/myuser/jars/adsoptimization_2.11-0.1.jar \
xyz
因此,“xyz”是我在命令中传递的字符串。目前,我已经硬编码了它,但它仍然不起作用。我想把它作为参数动态地传递给shell文件

我在主功能中的代码:

args(0) match  {
  case "str1" => TestQuery(spark).runstr1
  case "xyz" => TestQuery(spark).runxyz
  case "str2" => TestQuery(spark).runstr2
  case "str3" => TestQuery(spark).runstr3
}
因此,我要传递的“xyz”字符串将以args(0)的形式出现(然后我通过传递spark会话对象作为args来调用case类中定义的函数)


因此,这里的问题是如何简单地通过shell脚本运行spark作业,当您传入一个没有匹配模式的值时,会出现错误。你通过了军事革命,但你没有理由这样做。加上这个

args(0) match  {
  case "str1" => TestQuery(spark).runstr1
  case "xyz" => TestQuery(spark).runxyz
  case "str2" => TestQuery(spark).runstr2
  case "str3" => TestQuery(spark).runstr3
  case _ => TestQuery(spark).someDefaultDefined
}

在模式匹配表达式之前,是否可以执行
args.foreach(println)
?您将知道作为
args
传递的内容。另外,使用
SPARK\u PRINT\u LAUNCH\u COMMAND=1启动shell脚本,查看
SPARK submit
执行的具体操作。这应该足以让你找到根本原因。我看得出你的星火投稿没有任何问题。通过给出一个没有匹配模式的值,您的错误很容易被复制。也许您的args(0)没有捕获任何内容,您应该使用调试器,或者您可以只打印出args(0)老式样式的内容。然后我们可以进一步研究。实际上,你能把你的主要方法都贴出来吗?没关系。我可以通过将结果或agrs(0)放入一个val中来解决这个问题&然后匹配它。这是我的想法,但你说这是正确的参数。请别忘了在答案上做标记