是否可以编写一个Spark脚本,该脚本的参数可以通过名称而不是args()数组中的索引引用?我有一个脚本有4个必需的参数,根据这些参数的值,可能需要最多3个额外的参数。例如,在一种情况下,args(5)可能是我需要输入的日期。另一个,那个日期可能会因为我需要的另一个论点而最终出现在args(6)中。
Scalding实施了这个,但我不知道Spark的用途。
答案 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库。