前言
有时,我们在编写Spark任务(Job)时,希望传递命令行参数(Command Line Arguments)进任务脚本(Scrpits)。大多数情况下,我们可以利用指定环境变量实现这一目的。实际上,我们仍有更优雅的实现方法。
为 Spark 任务传递命令行(CLI)参数
为了传递命令行参数(Command Line Arguments)进Spark任务脚本(Scrpits),我们可以自定义一枚SparkConf配置项键值对,在spark-submit提交任务时通过--conf选项传入该键值对。注意,这里的键(Key)可以自由定义,不要求固定为spark.driver.args。
$ spark-submit --conf spark.driver.args='arg1 arg2 arg3' <TARGET_SPARK_SCRIPTS>
...
代码清单:通过
SparkConf传递命令行参数
在Spark任务脚本中,通过get()方法即可获取到目标SparkConf键值对。
val sc = new SparkConf()
val args = sc.getConf.get("spark.driver.args").split("\s+")
val param1 = args(0)
val param2 = args(1)
val param3 = args(2)
println("param1 passed from shell : " + param1)
println("param2 passed from shell : " + param2)
println("param3 passed from shell : " + param3)
System.exit(0)
代码清单:
Scala获取SparkConf命令行参数
if __name__ == "__main__":
sc = SparkConf()
args = sc.getConf().get("spark.driver.args").split("\s+")
print(args)
代码清单:
Python获取SparkConf命令行参数
参考资料
StackOverflow: https://stackoverflow.com/questions/29928999/
Script(s) by Ganesh: https://www.gchandra.com/hadoop/spark/spark-scala-command-line-arguments.html