使用spark-submit将HashMap参数传递给Scala

问题描述 投票:0回答:1

我正在定义一个以hashmap作为参数的主对象;

def main(args: Map [ String, Any ]  )
: Unit = {

    val v_COUNTRY_CODE =args("CTRY_CD").toString
    val v_REPORTING_DATE = args("REP_DT").toString
    val v_WorkSpaces = args("WS_NM").toString
    println("v_COUNTRY_CODE"+ v_COUNTRY_CODE)
    println("v_REPORTING_DATE"+ v_REPORTING_DATE)
    println("v_WorkSpaces"+ v_WorkSpaces)
    println("Yes I am done")
    sys.exit()
}

如何通过Hashmap运行时传递spark-submit参数:

spark-submit --verbose --name SAMPLE --master yarn --deploy-mode client --class com.scb.transformations.factScbB3dqBalancesFload /CTRLFW/btrapp_nas/RUBIK/hdpbatch/appscripts/../lib/rubikDashboard.jar { "HIVE_SCHEMA" -> "Test"}

引发错误:

线程“主”中的异常java.lang.NoSuchMethodException:com.scb.transformations.factScbB3dqBalancesFload.main([Ljava.lang.String;)

scala hashmap nosuchmethoderror spark-submit
1个回答
0
投票

Scala中的main()方法需要Array [String]类型的参数。因此,您只能通过CLI将以空格分隔的字符串作为参数传递。如果您进一步希望将参数用作映射,则只需选择键和值的分隔符即可;在您的代码中拆分它们并创建一个Scala映射。例如如果分隔符为'=',则可以将CLI参数简单地传递为

HIVE_SCHEMA =测试SomeOtherParam = SomeValue

并且在您的代码中,您可以创建类似的地图

val confMap = args.map(x =>(x.split(“ =”)(0),x.split(“ =”)(1))).toMap

© www.soinside.com 2019 - 2024. All rights reserved.