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

时间:2015-05-22 16:12:09

标签: scala apache-spark

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

Scalding实施了这个,但我不知道Spark的用途。

2 个答案:

答案 0 :(得分: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

然后在代码的开头加上这一行:

val namedArgs = args.map(x=>x.split("--")).map(y=>(y(0),y(1))).toMap

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

答案 1 :(得分:0)

Spark不提供此类功能。

你可以使用烫伤的Args(如果你不介意小班的依赖):

val args = Args(argsArr.toIterable)

您还可以使用任何提供您可能需要的解析功能的CLI库。