为 Spark 任务传递命令行(CLI)参数

Passing Command Line Arguments to Spark Tasks

Posted by zihengCat on 2018-12-07

前言

有时,我们在编写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命令行参数

参考资料