2015-05-22 5 views
2

Можно ли написать скрипт Spark, который имеет аргументы, которые могут ссылаться по имени, а не на индекс в массиве args()? У меня есть скрипт, который имеет 4 требуемых аргумента и в зависимости от их значения может потребовать до 3 дополнительных аргументов. Например, в одном случае args (5) может быть датой, которую мне нужно ввести. Я другой, эта дата может закончиться в args (6) из-за другого аргумента, который мне нужен.Spark: использование именованных аргументов для отправки приложения

Scalding это реализовано, но я не вижу, где Spark делает.

ответ

0

Spark не предоставляет такие функциональные возможности.

Вы можете использовать Args ошпаривания (если вы не возражаете зависимость для таких как малого класса):

val args = Args(argsArr.toIterable) 

Вы также можете использовать любую библиотеку CLI, который обеспечивает функцию парсинга вы можете захотеть.

5

Я действительно преодолел это довольно просто. Вам просто нужно предварить каждый аргумент с именем и разделителем говорят «-» когда вы звоните приложение

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 

Преобразует массив аргументов по умолчанию в Map, называемый namedArgs (или все, что вы хотите назвать). Оттуда просто обратитесь к карте и вызовите все свои аргументы по имени.

Смежные вопросы