我正在尝试从shell脚本提交火花作业。
它是一个简单的脚本,带有Spark-Submit命令。我正在尝试通过Spark-Submit命令向我的主要功能进行参数,但是当我尝试执行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
so'xyz'是我在命令中传递的字符串。目前,我已经对其进行了硬编码,它仍然无法正常工作,我想动态地将其作为参数传递给Shell File。
在主要功能中我的代码:
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 Session对象作为ARGS来调用案例类中定义的函数)
)所以在这里,如何简单地使Spark作业通过Shell脚本
当您通过没有匹配模式的值时,该错误就会出现。您通过了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
}