我有一个用scala编写的spark工作.我用
spark-shell -i <file-name>
Run Code Online (Sandbox Code Playgroud)
跑这份工作.我需要将命令行参数传递给作业.现在,我通过linux任务调用脚本,我在那里
export INPUT_DATE=2015/04/27
Run Code Online (Sandbox Code Playgroud)
并使用环境变量选项来访问该值:
System.getenv("INPUT_DATE")
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来处理Spark-shell中的命令行参数?
sou*_*ine 24
我的解决方案是使用自定义键来定义参数而不是spark.driver.extraJavaOptions,如果有一天你传入的值可能会干扰JVM的行为.
spark-shell -i your_script.scala --conf spark.driver.args="arg1 arg2 arg3"
Run Code Online (Sandbox Code Playgroud)
您可以在scala代码中访问参数,如下所示:
val args = sc.getConf.get("spark.driver.args").split("\\s+")
args: Array[String] = Array(arg1, arg2, arg3)
Run Code Online (Sandbox Code Playgroud)
Ami*_*mir 21
spark-shell -i <(echo val theDate = $INPUT_DATE ; cat <file-name>)
此解决方案导致在传递给文件之前在文件的开头添加以下行spark-submit:
val theDate = ...,
从而定义一个新变量.这样做的方式(<( ... )语法)称为进程替换.它可以在Bash中使用.有关此问题的更多信息,请参阅此问题,有关mkFifo非Bash环境的替代方案(例如),请参阅此问题.
将下面的代码放在脚本中(例如spark-script.sh),然后您可以简单地使用:
./spark-script.sh your_file.scala first_arg second_arg third_arg,并有一个Array[String]叫args你的论点.
文件spark-script.sh:
scala_file=$1
shift 1
arguments=$@
#set +o posix # to enable process substitution when not running on bash
spark-shell --master yarn --deploy-mode client \
--queue default \
--driver-memory 2G --executor-memory 4G \
--num-executors 10 \
-i <(echo 'val args = "'$arguments'".split("\\s+")' ; cat $scala_file)
Run Code Online (Sandbox Code Playgroud)
我使用的是extraJavaOptions当我有一个scala脚本时,它太简单了,无法完成构建过程,但我仍然需要将参数传递给它.它不漂亮,但它可以工作,你可以快速传递多个参数:
spark-shell -i your_script.scala --conf spark.driver.extraJavaOptions="-Darg1,arg2,arg3"
Run Code Online (Sandbox Code Playgroud)
请注意,-D不属于参数,这些参数arg1,arg2和arg3.然后,您可以在scala代码中访问参数,如下所示:
val sconf = new SparkConf()
val paramsString = sconf.get("spark.driver.extraJavaOptions")
val paramsSlice = paramsString.slice(2,paramsString.length)
val paramsArray = paramsSlice.split(",")
val arg1 = paramsArray(0)
Run Code Online (Sandbox Code Playgroud)
在第二行中,加载字符串,在第三行中,切断-D,在第四行中,使用,as delimiter 拆分字符串并将结果保存到数组中.然后,您可以访问第五行中的参数.
| 归档时间: |
|
| 查看次数: |
31765 次 |
| 最近记录: |