为了在使用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
有人可以让我知道是否可以命名命令行参数并据此进行解析吗?
答案 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")