我正在尝试从shell脚本提交Spark作业。
它是一个简单的脚本,只有spark-submit命令。我试图通过spark-submit命令给我的Main函数一个参数,但当我尝试执行shell文件时,作业失败并显示错误:
scala.MatchError: rma (of class java.lang.String)
因为我在我的代码中使用了匹配大小写。
这是我的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作业答案 0 :(得分:0)
传入没有匹配模式的值时会出现错误。你传递了rma
,但你没有案件。只需添加此...
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
}