像Java中一样,scala是否具有“选项”来解析spark-submit中的命令行参数?

时间:2019-05-24 10:10:50

标签: scala apache-spark

为了在使用spark-submit时解析命令行参数:

y

我正在传递一个数据库名称:ORACLE,我在代码中将其解析为

SPARK_MAJOR_VERSION=2 spark-submit --class com.partition.source.Pickup --master=yarn --conf spark.ui.port=0000 --driver-class-path /home/hdpusr/jars/postgresql-42.1.4.jar --conf spark.jars=/home/hdpusr/jars/postgresql-42.1.4.jar,/home/hdpusr/jars/postgresql-42.1.4.jar --executor-cores 4 --executor-memory 4G --keytab /home/hdpusr/hdpusr.keytab --principal hdpusr@DEVUSR.COM --files /usr/hdp/current/spark2-client/conf/hive-site.xml,testconnection.properties --name Spark_APP --conf spark.executor.extraClassPath=/home/hdpusr/jars/greenplum.jar sparkload_2.11-0.1.jar ORACLE

有没有办法给它一个类似于“ --dbname”的名称,然后在spark-submit中检查该选项以获取该选项的值? 例如:

  def main(args: Array[String]): Unit = {
    val dbtype   = args(0).toString
    .....
  }

在Java中,有两个软件包可用于执行相同的操作:

SPARK_MAJOR_VERSION=2 spark-submit --class com.partition.source.Pickup --master=yarn --conf spark.ui.port=0000 --driver-class-path /home/hdpusr/jars/postgresql-42.1.4.jar --conf spark.jars=/home/hdpusr/jars/postgresql-42.1.4.jar,/home/hdpusr/jars/postgresql-42.1.4.jar --executor-cores 4 --executor-memory 4G --keytab /home/hdpusr/hdpusr.keytab --principal hdpusr@DEVUSR.COM --files /usr/hdp/current/spark2-client/conf/hive-site.xml,testconnection.properties --name Spark_APP --conf spark.executor.extraClassPath=/home/hdpusr/jars/greenplum.jar sparkload_2.11-0.1.jar --dbname ORACLE

有人可以让我知道是否可以命名命令行参数并据此进行解析吗?

2 个答案:

答案 0 :(得分:1)

例如,如果您使用--dbname=ORACLE

val pattern = """--dbname=(.*)""".r
  val params = args.map {
    case pattern(pair, _) => pair
    case arg => throw new ConfigException.Generic(s"""unable to parse command-line argument "$arg"""")
}

\ s匹配空格,您可以使用它来创建--dbname ORACLE,但是如果只使用字符串,则更容易。

Here,您会看到所有的可能性。

答案 1 :(得分:0)

如果我们不确定密钥名称,在这种情况下,我们可以在密钥名称前加上spark. spark.dbname,并传递conf参数,例如spark-submit --conf spark.dbname=<> ....或将其添加到spark-defaults.conf
在用户代码中,我们可以使用sparkContext.getConf.get("spark.dbname")

来访问密钥