2017-10-20 115 views
4

我知道我可以通過可以用命名參數spark-submit?

spark-submit com.xxx.test 1 2 

傳遞參數主功能得到論證:

def main(args: Array[String]): Unit = { 
    // 讀取參數 
    var city = args(0) 
    var num = args(1) 

,但我想知道有沒有通過命名參數一樣的路徑:

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

以及如何在main.scala中獲取這個命名參數?

回答

3

,你可以寫一個解析輸入參數的基礎上,重點類似下面你自己的自定義類:

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 
    } 
} 

然後你可以用與這些方法在你的火花應用

你可即興創作CommandLineUtil按照您的要求

0

編號

正如你可以在Documentation中看到的,你只需傳遞你的應用程序的參數,然後你就可以處理它們。所以,如果你想擁有「命名參數」,那麼你應該在你的代碼中實現它(我的意思是它將是自定義的)。

相關問題