2017-10-20 7 views
4

Je sais que je peux passer argument à la fonction principale parPeut-spark-soumettre avec argument nommé?

spark-submit com.xxx.test 1 2 

et obtenir argument:

def main(args: Array[String]): Unit = { 
    // 读取参数 
    var city = args(0) 
    var num = args(1) 

mais je veux savoir est-il un chemin pour passer argument nommé comme:

spark-submit com.xxx.test --citys=1 --num=2 

et comment obtenir cet argument nommé dans main.scala?

Répondre

3

vous pouvez écrire votre propre classe personnalisée qui analyse les arguments d'entrée en fonction de la chose clé comme ci-dessous:

object CommandLineUtil { 

    def getOpts(args: Array[String], usage: String): collection.mutable.Map[String, String] = { 
    if (args.length == 0) { 
     log.warn(usage) 
     System.exit(1) 
    } 

    val (opts, vals) = args.partition { 
     _.startsWith("-") 
    } 

    val optsMap = collection.mutable.Map[String, String]() 
    opts.map { x => 
     val pair = x.split("=") 
     if (pair.length == 2) { 
     optsMap += (pair(0).split("-{1,2}")(1) -> pair(1)) 
     } else { 
     log.warn(usage) 
     System.exit(1) 
     } 
    } 

    optsMap 
    } 
} 

Ensuite, vous pouvez utiliser les méthodes avec dans votre application d'allumage

Vous peut improviser CommandLineUtil selon vos besoins

0

No.

Comme vous pouvez le lire dans le Documentation, il vous suffit de passer les arguments de votre application, puis vous les gérer. Donc, si vous voulez avoir des "arguments nommés", alors vous devriez implémenter cela dans votre code (je veux dire que ce sera personnalisé).