Spark:使用命名参数提交应用程序

J *_*ath 2 scala apache-spark

是否有可能编写一个Spark脚本,该脚本具有可以通过名称而不是args()数组中的索引引用的参数?我有一个脚本有4个必需的参数,根据这些参数的值,可能需要最多3个额外的参数.例如,在一种情况下,args(5)可能是我需要输入的日期.我是另一个,那个日期可能会因为我需要的另一个论点而最终出现在args(6)中.

烫伤实现了这一点,但我不知道Spark的作用.

J *_*ath 6

我实际上简单地克服了这个问题.您只需要在每个参数前加上一个名称,并在调用应用程序时使用分隔符" - "

spark-submit --class com.my.application --master yarn-client ./spark-myjar-assembly-1.0.jar input--hdfs:/path/to/myData output--hdfs:/write/to/yourData
Run Code Online (Sandbox Code Playgroud)

然后在代码的开头包含这一行:

val namedArgs = args.map(x=>x.split("--")).map(y=>(y(0),y(1))).toMap
Run Code Online (Sandbox Code Playgroud)

这会将默认的args数组转换为名为namedArgs的Map(或任何你想要调用它的地图.从那里开始,只需参考Map并按名称调用所有参数.